+/**\r
+ * Called when window is resized\r
+ * @param w New width\r
+ * @param h New height\r
+ */\r
+void windowReshape(int w, int h) {\r
+ GLdouble near = -10.0;\r
+ GLdouble far = 10.0;\r
+\r
+ glViewport(0, 0, (GLsizei) w, (GLsizei) h);\r
+ glMatrixMode(GL_PROJECTION);\r
+ glLoadIdentity();\r
+ if (w <= h) \r
+ glOrtho(near, far, near*(GLfloat)h/(GLfloat)w,\r
+ far*(GLfloat)h/(GLfloat)w, near, far);\r
+ else\r
+ glOrtho(near*(GLfloat)w/(GLfloat)h,\r
+ far*(GLfloat)w/(GLfloat)h, near, far, near, far);\r
+ glMatrixMode(GL_MODELVIEW); \r
+ glLoadIdentity();\r
+}\r
+\r
+/**\r
+ * Called when mouse event occurs\r
+ * @param btn Mouse button\r
+ * @param state State of mouse button\r
+ * @param x Mouse x position\r
+ * @param y Mouse y position\r
+ */\r
+void mouse(int btn, int state, int x, int y) {\r
+ \r
+}\r
+\r
+static GLfloat floorVertices[4][3] = {\r
+ { -20.0, 0.0, 20.0 },\r
+ { 20.0, 0.0, 20.0 },\r
+ { 20.0, 0.0, -20.0 },\r
+ { -20.0, 0.0, -20.0 },\r
+};\r
+\r
+/* Draw a floor (possibly textured). */\r
+static void\r
+drawFloor(void)\r
+{\r
+ glDisable(GL_LIGHTING);\r
+\r
+ //if (useTexture) {\r
+ // glEnable(GL_TEXTURE_2D);\r
+ //}\r
+\r
+ glBegin(GL_QUADS);\r
+ glTexCoord2f(0.0, 0.0);\r
+ glVertex3fv(floorVertices[0]);\r
+ glTexCoord2f(0.0, 16.0);\r
+ glVertex3fv(floorVertices[1]);\r
+ glTexCoord2f(16.0, 16.0);\r
+ glVertex3fv(floorVertices[2]);\r
+ glTexCoord2f(16.0, 0.0);\r
+ glVertex3fv(floorVertices[3]);\r
+ glEnd();\r
+\r
+ /*if (useTexture) {\r
+ glDisable(GL_TEXTURE_2D);\r
+ }*/\r
+\r
+ glEnable(GL_LIGHTING);\r
+}\r
+\r
+\r
+static GLfloat lightColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */\r
+static GLfloat lightPosition[4];\r
+static float lightAngle = 0.0, lightHeight = 20;\r
+\r
+\r
+/**\r
+ * Display function\r
+ */\r