1 / 16

From Gears to The Machine in 13 Steps Carolyn Smith COSC 4331 5/6/2009

From Gears to The Machine in 13 Steps Carolyn Smith COSC 4331 5/6/2009. How does gears.c work? - gear(GLfloat inner_radius, Glfoat outer_radius, Glfloat width, Glint teeth, Glfoat tooth_depth) - draw(void): glPushMatrix(); glTranslatef(-3.0, -2.0, 0.0);

Download Presentation

From Gears to The Machine in 13 Steps Carolyn Smith COSC 4331 5/6/2009

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. From Gears to The Machine in 13 Steps Carolyn Smith COSC 4331 5/6/2009

  2. How does gears.c work? - gear(GLfloat inner_radius, Glfoat outer_radius, Glfloat width, Glint teeth, Glfoat tooth_depth) - draw(void): glPushMatrix(); glTranslatef(-3.0, -2.0, 0.0); glRotatef(angle, 0.0, 0.0, 1.0); glCallList(gear1); GlPopMatrix(); - void key(unsigned char k [...]) //keyboard input for rotation of view on z-axis - void reshape(int width, int height) //responds to resizing of window by scaling gears appropriately - int limit = 0 by default, and int count = 1; limit can be set using an argument at run time, and animation ceases when count = limit

  3. Step 1: Change gears to rings Original code: gear1 = glGenLists(1); glNewList(gear1, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); gear(1.0, 4.0, 1.0, 20, 0.7); GlEndList(); Modified code: gear1 = glGenLists(1); glNewList(gear1, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); gear(1.0, 4.0, 1.0, 20, 0.0); glEndList();

  4. Step 2: Change ring radii & width Original code: gear1 = glGenLists(1); glNewList(gear1, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); gear(1.0, 4.0, 1.0, 20, 0); glEndList(); Modified code: gear1 = glGenLists(1); glNewList(gear1, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); gear(1.0, 1.5, 0.5, 20, 0.0); glEndList();

  5. Step 3: Remove translation Original code: glPushMatrix(); glTranslatef(-3.0, -2.0, 0.0); glRotatef(angle, 0.0, 0.0, 1.0); glCallList(gear1); glPopMatrix(); Modified code: glPushMatrix(); glTranslatef(0.0, 0.0, 0.0); // or just remove altogether glRotatef(angle, 0.0, 0.0, 1.0); glCallList(gear1); glPopMatrix();

  6. Step 4: Change rotation axes Original code (all rotating about z-axis): Gear1: glRotatef(angle, 0.0, 0.0, 1.0); Gear2: glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0); Gear3: glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0); Modified code: Gear1: glRotatef(angle, 0.0, 1.0, 1.0); Gear2: glRotatef(-2.0 * angle - 9.0, 1.0, 1.0, 0.0); Gear3: glRotatef(-2.0 * angle - 25.0, 1.0, 0.0, 1.0);

  7. Step 5: Add fourth gear Code to add: //(define new color, “yellow”) static GLfloat yellow[4] = {1.0, 1.0, 0.0, 1.0}; … gear4 = glGenLists(1); glNewList(gear4, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, yellow); gear(7.0, 7.5, 1.0, 20, 0.0); glEndList(); glEnable(GL_NORMALIZE); … glPushMatrix(); glRotatef(-2.0 * angle - 25.0, 0.0, 1.0, 0.0); glCallList(gear4); glPopMatrix();

  8. Step 6: Resize window Code to add: glutInitWindowSize(700, 700); glutInitWindowPosition(100,150);

  9. Step 7: Begin to construct base Code to add: static GLint gear5; // "holder"-- non-rotating gear … static GLfloat slate[4] = {0.4, 0.5, 0.6, 1.0); … gear5 = glGenLists(1); glNewList(gear5, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, slate); gear(8.0, 8.5, 1.0, 20, 0.0); glEndList(); glEnable(GL_NORMALIZE); … //in draw() glCallList(gear5); // no rotation matrix

  10. Step 8: Define background color Code to add: //in draw() glClearColor(0.0f, 0.1f, 0.3f, 0.0f);

  11. Step 9: Add pod Code to add: //(define new color, white) static GLfloat white[4] = {1.0, 1.0, 1.0, 1.0}; … pod = glGenLists(1); glNewList(pod, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white); glutSolidSphere(0.3, 15, 15); glEndList(); … //(in draw()) glCallList(pod);

  12. Step 10: Change camera rotation Original Code: static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0; Modified Code: static GLfloat view_rotx = 105.0, view_roty = 0.0, view_rotz = 45.0; Rotation variables are used in draw() to set up camera angle with each redraw, and can be modified using the key() function.

  13. Step 11: Add base supports Code to add: // in draw() glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, slate); glTranslatef(0.0, 8.0, 0.0); glutSolidCube(1.5); glTranslatef(0.0, 0.0, 1.5); glutSolidCube(1.8); glTranslatef(0.0, 0.0, 1.8); glutSolidCube(2.1); glTranslatef(0.0, 0.0, 2.1); glutSolidCube(2.4); glTranslatef(0.0, 0.0, 2.4); glutSolidCube(2.7); GlPopMatrix(); // repeat for other 3 legs with appropriate translation values

  14. Step 12: Zoom out for default view Original code: static void reshape(int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -40.0); } Modified line: glTranslatef(0.0, 2.0, -50.0);

  15. Step 13: Add key-controlled zoom Original code: static void key(char k ...) { switch (k) { case 'z': view_rotz += 5.0; break; case 'Z': view_rotz -= 5.0; break; case 27: /* Escape */ exit(0); break; default: return; } glutPostRedisplay(); } Modified line: // added two cases and converted z-axis camera // translation to a variable, view_zoom. case 'i': view_zoom += 0.2; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 2.0, view_zoom); break; case 'o': view_zoom -= 0.2; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 2.0, view_zoom); break;

  16. Source: “gears.h” by Brian Paul, converted to GLUT by Mark J. Kilgard Retrieved from Dr. Wright's ACL directory

More Related