Final Project, Spring 2009    (Score sheet)

Submission deadline: Wednesday, May 20, 2009.


The goal of the final project is to integrate and reinforce the various techniques learned in the first 11 weeks of this course, and also to give you an opportunity to pick one additional technique that you are particularly interested in and to study it and pursue it in some more detail.
Thus, we will split our discussion of ideas for your project into two parts: the "core" part that is based on course material covered in depth
and on the first 8 programming assignment, and then the "extension" part.

Your work should be done primarily in the C++ environment used in this class, and it may, of course, draw heavily on the frameworks created for the various assignments.

Project Core

There are five key techniques that you should have become familiar with; your project will probably incorporate some elements from each one:

1. Modeling Interesting Geometry

Interesting primitives can be made from triangle meshes, B-spline patches, or sweeps;
they can also be procedurally generated, such as a fractal landscape based on subdivision, or a B-rep terrain specified as a height function.
Interesting composites can be constructed from combinations of spheres, cubes, tori, and/or some of the above primitives.
The various instances could also be placed procedurally in arrays or along a curvy path.

2. Surface Decoration

The geometrical elements mentioned above can be provided with colors, textures, bumps, or can be made reflective or transparent.

3. Animation

The various geometric elements can be hooked together in a hierarchical manner with variable transformations,
so as to achieve kinematic, articulated limbs, or rotating wheels and sub-assemblies.
Alternatively, the geometry of the primitives itself could be changing: 
Individual parts could stretch non-uniformly, or the control points of a spline could move.
All these variables can simply be a function of time, or they could be controlled via the mouse or the keyboard.

4. Interaction

Real-time interaction could be as simple as starting or stopping an animation or controlling its speed.
At the other extreme, the mouse-cursor could be used to interactively change the pose of a mannequin,
or to define a target point in a landscape for a creature to walk toward.
Interaction could also be used to control the camera or to change the lighting in the scene.

5. Rendering

In the simplest case you can just call OpenGL with the right parameters to do the rendering for you.
For scenes with lots of reflecting surfaces and transparent objects it is better to use a ray-tracing renderer.

You should make a decision early on whether your project will focus more on a changing interactive scene with real time OpenGL rendering,
or on a mostly static or slowly varying scene, using more offline rendering techniques.
(Don't try to mix the two).

Example Scene Contents:

Extend the roller-coaster model into a carnival scene with one or two other rides that may involve intricate articulated movements of beams with attached seats for the riders.

Create a "spider" or other multi-legged creature that walks along your roller coaster track.

Some vehicle-creature transformer that can be controlled in its movement and transformation.

A glassy bubble-man composed of kinematically linked ellipsoid limbs that walks along some fractal terrain -- rendered by raytracing.

An intricate interlocked arrangement of donuts and of higher-genus objects rendered with some attention to global illumination.

Project Extensions

Below are some suggestions of how you might extend your project along one of the five axes outlined above.
If you strongly wish to try something else, you need to discuss that with the instructors and obtain permission from Prof. Sequin.

Modeling Interesting Geometry

Implement CC-subdivision surfaces with texture mapping for higher-genus objects.
One ore two examples of geometry files with texture coordinates will be provided.

Surface Decoration

Implement some form of displacement mapping.
Write your own inventive shader.


Add inverse kinematics to your articulated creature, so it can walk on uneven terrain;
or create some interactive claw on a multi-segmented limb that will try to reach a target position controlled by the mouse cursor.
Implement a simple spring-mass simulation system, that allows you to model a quivering piece of jello, or a waving flag.


Use the mouse cursor to interactively change the shape of a sweep curve or the form of a subdivision surface.
Use the mouse cursor to interactively manipulate the poses of a mannequin by grabbing any part of its body or its limbs.
Use the mouse and/or various keyboard keys to control the movement of a vehicle or creature.


For offline rendering:  A fancier rendering technique that considers global illumination, such as photon mapping or path-tracing.
For real-time rendering:  Some technique to do real-time shadows in a dynamic scene, such as shadow volumes,
or to otherwise bring in more non-local information, for example with ambient occlusion.

To allow you to make an informed decision as how to best invest your time and effort, consult the Score-sheet;
it will give you an idea of how we value various possible contributions and what combination might give you the best chance for an A.

Project Deliverables:

Demonstrations of Final Course Project:

On Tuesday and Wednesday, May 19 and 20, 2009, in 330 Soda Hall.
-- either on one of our Lab machines
or on your laptop.
A sign-up form with 12-minute interview/demo time slots on either of the two days will be made available in due time.


I understand that there are some concerns about how difficult it may be to obtain an A-grade on the project.
The score sheet should help you to invest the available time wisely so you can obtain some interesting results with a reasonable amount of effort.
==> We would like to see 40% of the projects obtain a grade A- or better !

  - - > CS 184 HOME < - - - - > CURRENT < - -
Page Editor: Carlo H. Séquin