Math 217A - Spring 2002 - Final Project Suggestions
due date Tuesday, Finals Week.

Goals:  Implement a graphics project of your choosing.    You will probably use OpenGL or the RayTrace software package, but this is not actually required.  You should expect to spend between 20 and 40 hours over a 3 week period.  (If you find your project is taking less than 20 hours, you should probably enhance it with more features; if you start taking too long, you might want to cut back on the features you are implementing.)

Projects will judged on technical merit, artistic merit, difficulty, and general "coolness".

Turn in: Detailed instructions now available.   We will ask you to prepare one or more GIF's with results from your project.  You will also prepare one "thumbnail" GIF.  You should turn in source code for your project (we will not post source code on the web).  For interactive projects, you should turn in a PC executable.   Optionally, you may prepare a entire web page for your project.
    Students projects will be posted on the web (using the thumbnail GIF's to give a quick overview of all the projects), and the larger GIFs and/or executables, etc., will be made available too.
    We will schedule a "show and tell" period, sometime during final exam week, to exhibit everyone's projects to the rest of the class.

Choosing a project:  You should choose a project and have a plan for what you will do, no later than Friday, May 17.  Please inform me and Frank verbally, or by email, what your project will be.  You have great deal of latitude in choosing a project, but it should be graphics related of course. 
    You may work jointly with other students, especially if you are able to delimit individual responsibilities clearly.  Obviously the size of the project should be roughly proportional to the number of contributors.
    Some suggestions for project topics are listed below.  For some inspiration, you may see projects from my earlier undergraduate classes, from Fall-Winter 2000 and Winter 2001 and Spring 2001.   For another source of inspiration, check out the gallery of student projects of the University of Toronto graphics course.

Suggestions for projects: (but feel free to ignore these suggestions).

  1. OpenGL scenes:
    1. Create a museum scene, with pictures on the walls, furniture, etc.  Be sure it is attractively lit.  Allow the user to navigate the room.
    2. Create a robot arm and hand.  Let the user control it with keyboard controls.  User should have a goal such as pushing a button, or grasping an object.
    3. Learn about using transparency in OpenGL.  Create an attractive scene with a fishbowl.  Or with glasses filled with transparent colored liquids. (Or be creative.)
    4. Build a roller coaster ride.
    5. Learn to use the stencil buffer in OpenGL. Use this in one of the above scenes to create reflections in a small surface.
  2. Ray Tracing scenes:
    1. Create one of the scenes above, such as 1.a or 1.c, but use the Ray Trace software instead of OpenGL.  Your scene should look better, but will not be navigable in real time.
    2. Implement some other raytraced scene.  Possibly include distributed ray tracing features.
  3. Animation:
    1. Use quaternions and slerping in a demo to illustrate interpolating orientations. 
    2. Make a movie with some interesting action.
  4. Games:  Build a simple game.  Include some cool graphics effects.
  5. Splines:
    1. Build some interesting objects with Bezier curves or B-splines.  (OpenGL or Ray Trace support this.)
    2. Make a dancing teapot (by controlling the control points of the teapot). 
    3. Implement Catmull-Rom and Overhauser interpolating splines.  Make them interactively specified.
    4. Learn (on your own) about subdivision surfaces.  Render some subdivision surfaces.   Optionally let the user interactively set control points.
  6. Texture mapping: Learn (on your own) about procedurally generated 3D textures based on noise.  Implement one or more such textures.  E.g.   marble or wood or clouds.  Perhaps best done with an extension to the Ray Trace software.
  7. Radiosity/Global lighting. Do something with implementation of radiosity, or forwards ray tracing, or bidirectional path tracing, or photon mapping.
  8. Physical simulations:
    1. Simulate a small number of planets moving inside a box under the influence of gravity (look for instability with more than two planets!).
    2. Simulate cloth or jello with a system of springs.  Let the user iteractively affect the simulation.