(no commit message)
authorAsh Tyndall <[email protected]>
Tue, 18 Oct 2011 13:01:59 +0000 (21:01 +0800)
committerAsh Tyndall <[email protected]>
Tue, 18 Oct 2011 13:01:59 +0000 (21:01 +0800)
scene.c

diff --git a/scene.c b/scene.c
index e5d2a17..b4469b7 100644 (file)
--- a/scene.c
+++ b/scene.c
@@ -110,13 +110,6 @@ char *dirDefault2 = "/cslinux/examples/CITS2231/project-files/models-textures";
 \r
 char dataDir[200];  // Stores the directory name for the meshes and textures.\r
 \r
-static GLfloat floorVertices[4][3] = {\r
-  { -1000.0, 0.0, 1000.0 },\r
-  { 1000.0, 0.0, 1000.0 },\r
-  { 1000.0, 0.0, -1000.0 },\r
-  { -1000.0, 0.0, -1000.0 },\r
-};\r
-\r
 static GLfloat lightColor[] = {1.0, 1.0, 1.0, 1.0}; // White light\r
 static GLfloat lightPosition[4];\r
 \r
@@ -129,10 +122,18 @@ static float lightAngle = 0.0, lightHeight = 5;
 GLfloat angle = -150;   /* in degrees */\r
 GLfloat angle2 = 30;   /* in degrees */\r
 \r
+/* Near and far parameters */\r
 GLfloat near = -10;\r
 GLfloat far = 10;\r
 \r
-static float zoomFactor = 1.0;\r
+/* Zoom factor for mouse movements */\r
+GLfloat zoomFactor = 1.0;\r
+\r
+/* Recursion level for floor drawing */\r
+int drawFloorRecurse = 5;\r
+\r
+/* Size of floor, from -n to n */\r
+int floorSize = 100;\r
 \r
 /**\r
  * Prints out error message when file cannot be read\r
@@ -492,15 +493,12 @@ void windowReshape(int w, int h) {
   glViewport(0, 0, (GLsizei) w, (GLsizei) h);\r
   glMatrixMode(GL_PROJECTION);\r
   glLoadIdentity();\r
-  GLfloat x = 2.0f*(200 + 0.5)/w-1.0;\r
-  GLfloat y = 2.0f*(200 + 0.5)/h-1.0;\r
-  glTranslatef(-x,-y,0.0f);\r
   if (w <= h) \r
-    glOrtho(zoomFactor*near, zoomFactor*far, zoomFactor*near*(GLfloat)h/(GLfloat)w,\r
-             zoomFactor*far*(GLfloat)h/(GLfloat)w, near, far);\r
+    glOrtho(near, far, near*(GLfloat)h/(GLfloat)w,\r
+             far*(GLfloat)h/(GLfloat)w, near, far);\r
   else\r
-    glOrtho(zoomFactor*near*(GLfloat)w/(GLfloat)h,\r
-             zoomFactor*far*(GLfloat)w/(GLfloat)h, zoomFactor*near, zoomFactor*far, near, far);\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
@@ -512,12 +510,7 @@ void windowReshape(int w, int h) {
  * @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
-static void\r
-mouse(int button, int state, int x, int y)\r
-{\r
+void mouse(int button, int state, int x, int y) {\r
   if (button == GLUT_LEFT_BUTTON) {\r
     if (state == GLUT_DOWN) {\r
       moving = 1;\r
@@ -540,9 +533,12 @@ mouse(int button, int state, int x, int y)
   }\r
 }\r
 \r
-static void\r
-motion(int x, int y)\r
-{\r
+/**\r
+ * Called when motion event occurs\r
+ * @param x Mouse x position\r
+ * @param y Mouse y position\r
+ */\r
+void motion(int x, int y) {\r
   if (moving) {\r
     angle = angle + (x - startx);\r
     angle2 = angle2 + (y - starty);\r
@@ -559,58 +555,51 @@ motion(int x, int y)
   }\r
 }\r
 \r
-void idle() {\r
-  angle = (int)(angle + 10) % 360;\r
-  //angle2 = (int)(angle2 + 10) % 360;\r
-  printf("Angle 1: %f, Angle 2: %f\n", angle, angle2);\r
-  sleep(1);\r
-  glutPostRedisplay();\r
-}\r
-\r
-\r
-int drawFloorRecurse = 5;\r
-\r
-void drawSquare(int recurseLevel, float x1, float y1, float x2, float y2) {\r
+/**\r
+ * Recursive function to draw a square by drawing smaller and smaller\r
+ * divisions of the square, determined by drawFloorRecurse.\r
+ * @param recurseLevel Current level of recursion, only pass 0\r
+ * @param x1 top-left x\r
+ * @param z1 top-left z\r
+ * @param x2 bottom-left x\r
+ * @param z2 bottom-left z\r
+ */\r
+void drawSquare(int recurseLevel, float x1, float z1, float x2, float z2) {\r
 \r
   if ( drawFloorRecurse != recurseLevel ) {\r
+    // Calculate middle points\r
     float xm = (x1 + x2) / 2.0;\r
-    float ym = (y1 + y2) / 2.0;\r
+    float zm = (z1 + z2) / 2.0;\r
+\r
+    // Increment recursion level\r
     int rnew = recurseLevel + 1;\r
 \r
     // Split into four sub-quads\r
-    drawSquare(rnew, x1, y1, xm, ym);\r
-    drawSquare(rnew, x1, ym, xm, y2);\r
-    drawSquare(rnew, xm, ym, x2, y2);\r
-    drawSquare(rnew, xm, y1, x2, ym);\r
+    drawSquare(rnew, x1, z1, xm, zm);\r
+    drawSquare(rnew, x1, zm, xm, z2);\r
+    drawSquare(rnew, xm, zm, x2, z2);\r
+    drawSquare(rnew, xm, z1, x2, zm);\r
 \r
   } else {\r
+    // Draw square.\r
+    // **NOTE: Is the polygon facing in the right direction?\r
     glBegin(GL_QUADS);\r
-      glVertex3f(x1, 0.0, y1);\r
-      glVertex3f(x1, 0.0, y2);\r
-      glVertex3f(x2, 0.0, y2);\r
-      glVertex3f(x2, 0.0, y1);\r
+      glVertex3f(x1, 0.0, z1);\r
+      glVertex3f(x1, 0.0, z2);\r
+      glVertex3f(x2, 0.0, z2);\r
+      glVertex3f(x2, 0.0, z1);\r
     glEnd();\r
   }\r
 \r
 }\r
 \r
 /**\r
- * Draw a floor.\r
+ * Draw a floor by calling the drawSquare recursion\r
  */\r
 void drawFloor() {\r
\r
-drawSquare(0, -100.0, -100.0, 100.0, 100.0);\r
-\r
-  /*if (useTexture) {\r
-    glDisable(GL_TEXTURE_2D);\r
-  }*/\r
-\r
+  drawSquare(0, -floorSize, -floorSize, floorSize, floorSize);\r
 }\r
 \r
-/*void drawSquare(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) {\r
-  drawSquare(0, x1, y1, x2, y2);\r
-}*/\r
-\r
 /**\r
  * Display function\r
  */\r
@@ -623,6 +612,8 @@ void display() {
     0.0, 1.0,  0.0   /* up is in postivie Y direction */\r
     );\r
 \r
+  // **NOTE: Currently this rotation function is all that moves the camera off\r
+  //         the flat surface. Need to integrate function into gluLookAt\r
   glRotatef(30.0, 1.0, 0.0, 0.0);\r
 \r
   /* Reposition the light source. */\r
@@ -632,9 +623,10 @@ void display() {
   lightPosition[3] = 0.0;\r
 \r
   glPushMatrix();\r
-      /* Perform scene rotations based on user mouse input. */\r
-    \r
+\r
+    /* Perform scene rotations based on user mouse input. */\r
     glRotatef(angle, 0.0, 1.0, 0.0);\r
+    glRotatef(angle2, 1.0, 0.0, 0.0);\r
 \r
     glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);\r
 \r

UCC git Repository :: git.ucc.asn.au