CS 5600 - Spring 2012

Homework Assignment 3

OpenGL Lighting (100 points)

Handed out: February 20, 2013
Due: 11:59pm, March 20, 2013

 

This is a bigger assignment than the previous ones.  Do NOT wait until after Spring Break to start on it!

Read everything, I tried to be clear in the specification.

 

You will write an OpenGL program which renders a lit, animated, dog figure. Try to make your dog as cute as possible. You should approximate the body, head, tail, legs, ears, nose, and eyes with spheres (gluSphere).  Make a nice looking dog through transformations.  The legs need two parts: upper and lower leg.  You should use hierarchical modeling to achieve the desired animation effect.  You must use z-buffering to make the eyes, nose, body parts look correct and connected (hint: think about intersecting spheres.

 

1. You will write a program that animates a dog modeled by calls to gluSphere.

quadratic = gluNewQuadric(); // Create A Pointer To The Quadric Object

gluQuadricNormals(quadratic, GLU_SMOOTH); // Create Smooth Normals

gluSphere(quadratic, 100.0, 20, 20); // or whatever parameters you want

2. A non-uniform scaling will give you elongated spheres (dog-body parts).

3. The dog will walk along the ground from the left side to the right side of the screen.  Draw a colored ground plane for the dog to walk upon.  You will not be graded on the style of the walk; it should just walk as similar to a dog as you can make it.  Hint: use a sin function to cycle through the walk by rotating joints and translating the dog.

4. Provide a 'reset' which returns the dog to the initial position by typing the 'r' key.

5. Make the dog walk faster by repeatedly typing the 'f' key. The reset should not reset the speed.

6. Make the dog walk slower by repeatedly typing the 's' key. The reset should not reset the speed.

7. You should allow the dog to rotate about its center by typing the 'l' (the L key in lowercase) to rotate right and 'k' to rotate left. The reset key should not reset the rotation, just the position of the dog. When the dog rotates, it should walk in the direction it is rotated. That is, if the dog is rotated 90 degrees to the right, it should walk in the direction of the near-plane. If the dog rotates 90-degress to the left, it should talk in the direction of the far plane (away from the viewer)

8. The lighting should be a white light at full intensity.  The ‘c’ key should toggle between the light following the camera and the light being fixed in the scene.  Initially, and if you reset, the light should follow the camera.  It should be offset slightly from the camera position though so that you can see shading better.  90 degrees from the camera is too much, something like 20-25 degrees should be sufficient.  Humans are used to light being above the viewer.  I suggest placing the light above and to the right of the viewer.

9. After typing the 'q' key, the lighting should be flat-shading.

10. After typing the 'w' key, the lighting should be smooth shading.

11. Make the dog an interesting material with 'glowing' eyes, nose and ears.  The main body should be a chrome material (see the previous link)  which is highly specular and use a low tessellation for the sphere which is the body so that you can see the problems with fixed function pipeline rendering (Gouraud). You can make the legs whatever color you’d like.  Document your choices.

12. You must use perspective projection for this assignment.

13. You must turn in documentation as in the other assignments.

14. You must include a virtual trackball to move the camera.  This will provide mouse control to move the camera around the scene.

 

Output

The program should draw its output to an OpenGL window of size 512x512 as in the example program. You should use a perspective projection in this assignment. hint: use gluPerspective to set the PROJECTION matrix stack

 

Submission

use the handin routine in the CADE Lab. You can with zip or tar your solution. You should comment your code appropriately and hand in a web-page that will serve as complete documentation. Please include a paragraph of difficulties and a paragraph of what you learned in this assignment.

The handin name for this lab is "lab3".

Windows users should use the Zip utility and handin a single zipped file. Unix users should use the tar program to do the same. We will recompile the programs to grade them. Make sure your workspace/program will compile for us. That is, be careful about your user-specific pathname variables! If you do this on a home machine, please allow sufficient time for porting to the CADE machines. We will grade based on compiling and running on the CADE machines.

Due to a bug in the handin program, do not include spaces in the names of the files that you submit, otherwise we will not receive them. For instance, "no spaces.txt" is not a valid filename and would not be received, while "no_spaces.txt" is valid. Please keep this in mind while handing in your assignment.