CSE 167 - Introduction to Computer Graphics - Fall 2004
Instructor: Sam Buss,  Univ. of California, San Diego

Project #4 - Add lights and materials to your scene. 

Due Date: Tuesday, November 9, midnight.

Goals: Use illumination and shading to make your scene from project #3 look more three-dimensional.  Learn how to shade objects with the Phong lighting model in OpenGL.  Create three lights, two or more materials.  Add keyboard controls to your program.

What to hand in:  (1) Make a directory called LightedScene in your CSE 167 storage directory.  (The CSE 167 home directory on ieng9, under Class Resources, not your "My Documents" folder).   Place, in that directory, all your source files and project files (including .sln and .vcproj files).
You must upload also, a thumbnail GIF file, a full size screenshot and a very simple HTML file.  This will collect the entire class's projects into a web page that will be made accessible on the web.
As usual, grading will be personalized and one-on-one with a TA or with Sam Buss.  Your program must run on the PC lab, you must come into the PC lab and meet one of us.  You will have to show your source code, run the program, possibly make changes on the spot to your program and recompile as requested by the grader, and be able to explain how your program works and why it renders what it does. Your files should be complete and project must recompile in the ieng9 directory.   Grading must be done within two weeks of the due date, preferably earlier.


1. Download PC executable from the web, at http://www.math.ucsd.edu/~sbuss/CourseWeb/CSE167_2004F/LightedScene.exe.   Run the executable file on a PC.  You will see a scene with a surface of rotation and a letter "S".  Now there are also three lights (shown as three spheres) and the surfaces show Phong lighting effects, including specular highlights.   The LightedScene program supports all the old controls from WireFrameScene plus some new ones:

Experiment with all of these controls.  Try increasing and decreasing the mesh fineness while switching back and forth between smooth and flat shading modes.  Notice how the specular highlights change size and position when you toggle the "h" command -- understand why this happen.  Rotate slowly around the object in smooth and flat shading modes -- note how a little bit of the faceting can be seen even in smooth mode, especially if the mesh size is not very high.

Your job is to re-create this program -- but with your own three-dimensional geometry from Programming assignment #3. 

2. Form a new project and workspace -- call it LightedScene.  Copy YOUR files from Project #3 and include them in the project LightedScene (you will probably wish to rename the source files too).     For information on how to build a new project, read this handout on starting a new Visual .NET program.

3. Add three lights and ambient lighting.

4. Keyboard controls "1", "2" and "3" toggle these lights off and on.  Add these controls to the myKeyboardFunc routine.  glEnable(GL_LIGHTi)  and glDisable(GL_LIGHTi),  for i = 0, 1,2, are the relevant commands to turn lights on and off.

5. Give objects in your scene materials and material properties. 

6.  Give normal vectors for the vertices in your surface of rotation.  (Normal vectors are automatically given for the built-in glut Solid Objects.  If you built some custom geometries you probably need to add normal vectors for them too.)
        - You probably will need to use the glEnable(GL_NORMALIZE) command (why???).

7. Add the keyboard command "s" that toggles between flat and smooth shading mode for all materials in the scene.

8. Add the "h" keyboard command to toggle between the two modes:
    Mode (a) with positional lights and local viewer, and mode (b) with directional lights and non-local viewer.

9. Make a screenshot and a thumbnail gif, then turn everything in.    Reminder: you must turn in both (1) files to the CSE167 storage directory, including source files and project files and (2) files that uploaded to the common class web page using the Project Four upload page.    This must include a thumb.gif file and a JPEG screenshot image as in Project #3.  For your index.html file, modify the one used for handing in Project #3.

10. Extra credit items (up to a total of 1/2 point extra credit only):  
        (a) Learn how to apply textures on your own (we will discuss in it class later) and give the base plane an attractive texture. 
        Or, (b) Add a spotlight to the demo and show it off effectively.

Grading is on a scale of 1-10.