Played around with lighting, drew arrows, ran into issues
authorAsh Tyndall <[email protected]>
Thu, 20 Oct 2011 13:46:24 +0000 (21:46 +0800)
committerAsh Tyndall <[email protected]>
Thu, 20 Oct 2011 13:46:24 +0000 (21:46 +0800)
KNOWN ISSUES:
* Teapot sides are being weird
* drawSquare doesn't appear to be functioning correctly
* Floor doesn't light correctly
* Camera angle is all wrong (hold down 'w' to see scene)
* windowReshape doesn't currently work outside of default parameters
CHANGES:
* Discovered I was using an orthographic projection instead of a perspective projection. glOrtho stuff needs to change to glFrustrum. I'm using gluPerspective in the mean time, but I can't seem to get it to angle properly.
* Various changes and experimentation.

globals.c
globals.h
helper.c
scene.c

index a5e70f4..6f7e985 100644 (file)
--- a/globals.c
+++ b/globals.c
@@ -82,6 +82,16 @@ GLfloat lineLength = 100;
 GLfloat diffuse0[]={1.0, 0.0, 0.0, 1.0};
 GLfloat ambient0[]={1.0, 0.0, 0.0, 1.0};
 GLfloat specular0[]={1.0, 0.0, 0.0, 1.0};
-GLfloat emission0[] = {1.0, 1.0, 1.0, 0.5};
+GLfloat emission0[] = {0.0, 0.3, 0.3, 1.0};
+
+GLfloat direction0[] = {0.0, 0.0, 0.0};
 GLfloat light0_pos[] ={1.0, 1.0, 0,0, 0.5};
-GLfloat glightmodel[] = {0.2,0.2,0.2,1};
\ No newline at end of file
+
+GLfloat shine = 100.0;
+
+GLfloat glightmodel[] = {0.2,0.2,0.2,1};
+
+/* Material types */
+GLfloat ambient[] = {0.2, 0.2, 0.2, 1.0};
+GLfloat diffuse[] = {1.0, 0.8, 0.0, 1.0};
+GLfloat specular[] = {1.0, 1.0, 1.0, 1.0};
\ No newline at end of file
index 71a21c2..6f6a626 100644 (file)
--- a/globals.h
+++ b/globals.h
@@ -39,7 +39,7 @@ extern GLfloat lightPosition[];
 extern int moving, startx, starty;
 extern int lightMoving, lightStartX, lightStartY;
 
-
+/* Time varying or user-controled variables. */
 extern float jump;
 extern float lightAngle, lightHeight;
 extern GLfloat angle;
@@ -73,8 +73,18 @@ extern GLfloat diffuse0[];
 extern GLfloat ambient0[];
 extern GLfloat specular0[];
 extern GLfloat emission0[];
+
+extern GLfloat direction0[];
 extern GLfloat light0_pos[];
+
+extern GLfloat shine;
+
 extern GLfloat glightmodel[];
 
+/* Material types */
+extern GLfloat ambient[];
+extern GLfloat diffuse[];
+extern GLfloat specular[];
+
 #endif /* GLOBALS_H */
 
index 33799d5..0071af4 100644 (file)
--- a/helper.c
+++ b/helper.c
@@ -232,9 +232,7 @@ void drawSquare(int recurseLevel, float x1, float z1, float x2, float z2) {
 
   } else {
     // Draw square.
-    // **NOTE: Is the polygon facing in the right direction?
-    // **NOTE: We're drawing large strips, which might be a lighting problem
-
+    // **NOTE: We're drawing large strips, instead of squares, which might cause a lighting problem
     glBegin(GL_QUADS);
       glNormal3f(0,1,0);
       glVertex3f(x1, 0.0, z1);
@@ -256,24 +254,25 @@ void drawFloor() {
  * Draw x, z axis on floor
  */
 void drawLine() {
-    // **NOTE: fix function
-    glDisable(GL_TEXTURE_2D);
-    glDisable(GL_LIGHTING);
-    //glEnable(GL_BLEND);
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    glColor3f( 0.0, 0.0, 0.0 );
-
-    glBegin(GL_LINES);
+  // **NOTE: Function does not currently draw arrow-heads
+
+  glDisable(GL_TEXTURE_2D);
+  glDisable(GL_LIGHTING);
+  glEnable(GL_BLEND);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+  glColor3f( 0.0, 0.0, 0.0 );
+
+  glBegin(GL_LINES);
     glVertex3i(  lineLength, 0.0, 0.0 );
     glVertex3i( -lineLength, 0.0, 0.0 );
-    glEnd();
+  glEnd();
 
-    glBegin(GL_LINES);
+  glBegin(GL_LINES);
     glVertex3i( 0.0, 0.0,  lineLength );
     glVertex3i( 0.0, 0.0, -lineLength );
-    glEnd();
+  glEnd();
 
-    //glDisable(GL_BLEND);
-    glEnable(GL_LIGHTING);
-    glEnable(GL_TEXTURE_2D);
+  glDisable(GL_BLEND);
+  glEnable(GL_LIGHTING);
+  glEnable(GL_TEXTURE_2D);
 }
\ No newline at end of file
diff --git a/scene.c b/scene.c
index 264d598..0c5329b 100644 (file)
--- a/scene.c
+++ b/scene.c
@@ -184,16 +184,7 @@ void makeMenu() {
  */\r
 void windowReshape(int w, int h) {\r
   glViewport(0, 0, (GLsizei) w, (GLsizei) h);\r
-  /*glMatrixMode(GL_PROJECTION);\r
-  glLoadIdentity();\r
-  if (w <= h) \r
-    glFrustum(near, far, near*(GLfloat)h/(GLfloat)w,\r
-             far*(GLfloat)h/(GLfloat)w, -100, 100);\r
-  else\r
-    glFrustum(near*(GLfloat)w/(GLfloat)h,\r
-             far*(GLfloat)w/(GLfloat)h, near, far, nearClip, farClip);\r
-   glMatrixMode(GL_MODELVIEW);\r
-   glLoadIdentity();*/\r
+  // **NOTE: windowReshape needs to be re-written using glFrustrum and perspective projection calculations\r
 }\r
 \r
 /**\r
@@ -295,17 +286,6 @@ void motion(int x, int y) {
 void display() {\r
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
   glLoadIdentity();\r
-  //gluLookAt(\r
-  //  0.0, 0.0, 30.0,  /* eye is at (x,y,z) */\r
-  //  0.0, 0.0,  0.0,  /* center is at (x,y,z) */\r
-  //  0.0, 1.0,  0.0   /* up is in postivie Y direction */\r
-   // );\r
-\r
-  glTranslatef(camx, camy, camz);\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(rot, 1.0, 0.0, 0.0);\r
 \r
   /* Reposition the light source. */\r
   lightPosition[0] = 12*cos(lightAngle);\r
@@ -315,9 +295,11 @@ void display() {
 \r
   glPushMatrix();\r
 \r
-    /* Perform scene rotations based on user mouse input. */\r
+    /* Perform scene rotations based on user mouse/keyboard input. */\r
     glRotatef(angle, 0.0, 1.0, 0.0);\r
-    glRotatef(angle2, 1.0, 0.0, 0.0); //**NOTE: Only one degree of freedom\r
+    glRotatef(angle2, 1.0, 0.0, 0.0);\r
+    glTranslatef(camx, camy, camz);\r
+    glRotatef(rot, 1.0, 0.0, 0.0);\r
 \r
     glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);\r
 \r
@@ -327,7 +309,7 @@ void display() {
     \r
     // Draw teapot for a test object\r
     glPushMatrix();\r
-      glTranslatef(0.0, 0.5, 0.0); // **NOTE: Teapot does not rest on surface\r
+      glTranslatef(0.0, 0.5, 0.0); // **NOTE: Teapot currently does not rest on surface\r
       glColor3f(0.0, 0.0, 0.0);\r
       glutSolidTeapot(1);\r
     glPopMatrix();\r
@@ -350,50 +332,27 @@ void display() {
  * init function; sets initial OpenGL state\r
  */\r
 void init() {\r
-  //glMatrixMode(GL_PROJECTION);\r
-  //glLoadIdentity();\r
-\r
-   //gluPerspective(\r
-   // 60.0,  /* field of view in degree */\r
-   //  1.0,  /* aspect ratio */\r
-   // nearClip,  /* Z near */\r
-    // farClip   /* Z far */\r
-   // );\r
-  \r
   glMatrixMode(GL_MODELVIEW);\r
   glLoadIdentity();\r
 \r
-  // **NOTE: Needs tidy\r
   glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);\r
   glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);\r
   glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);\r
   glLightfv(GL_LIGHT0, GL_SPECULAR, specular0);\r
-  GLfloat direction0[] = {0.0, 0.0, 0.0};\r
   glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction0);\r
+\r
   glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 90.0);\r
+\r
   glLightModelfv(GL_LIGHT_MODEL_AMBIENT, glightmodel);\r
 \r
-  GLfloat ambient[] = {0.2, 0.2, 0.2, 1.0};\r
-  GLfloat diffuse[] = {1.0, 0.8, 0.0, 1.0};\r
-  GLfloat specular[] = {1.0, 1.0, 1.0, 1.0};\r
-  GLfloat shine = 100.0;\r
   glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);\r
   glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);\r
   glMaterialfv(GL_FRONT, GL_SPECULAR, specular);\r
+  glMaterialfv(GL_FRONT, GL_EMISSION, emission0);\r
   glMaterialf(GL_FRONT, GL_SHININESS, shine);\r
 \r
-  GLfloat emission[] = {0.0, 0.3, 0.3, 1.0};\r
-  glMaterialfv(GL_FRONT, GL_EMISSION, emission);\r
-\r
   glEnable(GL_LIGHT0);\r
   glEnable(GL_LIGHTING);\r
-  //glEnable(GL_COLOR_MATERIAL);\r
-  //glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );\r
-  //glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, specular0);\r
-  //glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, emission0);\r
-\r
-  \r
-\r
 }\r
 \r
 /**\r
@@ -429,21 +388,21 @@ int main(int argc, char **argv) {
   glDepthFunc(GL_LEQUAL);  // the type\r
   glEnable(GL_CULL_FACE);\r
   glEnable(GL_TEXTURE_2D);\r
-  glEnable(GL_BLEND);\r
   glLineWidth(1.0);\r
 \r
+  // **NOTE: Currently the perspective and look-at code is static, for testing purposes\r
   glMatrixMode(GL_PROJECTION);\r
   gluPerspective(\r
      40.0, /* field of view in degree */\r
       1.0, /* aspect ratio */\r
-      1.0, /* Z near */\r
+      1.0, /* Z near */ // **NOTE: Seems to be issue with near < 0 causing invisible everything\r
     100.0  /* Z far */\r
     );\r
 \r
   glMatrixMode(GL_MODELVIEW);\r
   gluLookAt(\r
-    0.0,  35.0, -20.0,  /* eye is at (0,8,60) */\r
-    0.0,  10.0,  0.0,  /* center is at (0,8,0) */\r
+    0.0,  35.0, -20.0,  /* eye is at (x,y,z) */\r
+    0.0,  10.0,  0.0,  /* center is at (x,y,z) */\r
     0.0,  1.0,   0.0   /* up is in postivie Y direction */\r
     );\r
 \r
@@ -460,4 +419,4 @@ int main(int argc, char **argv) {
   init();\r
 \r
   glutMainLoop();\r
-}\r
+}
\ No newline at end of file

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