the robot arm

Project 2: Modeler

Assigned: October 20, 2000
Due: November 3, 2000
Artifact:  November 6, 2000

Help sessions: Monday, October 23, 3:30-4:30 and Tuesday, October 24, 2:30-3:30

Project TA : Doug Johnson
Email : djohnson@cs




Quick Links

  1. W2K Skeleton Code and examples (zip)
  2. W2K Skeleton Code and examples, plus application sources and viewpoint edit (zip)
  3. How to use and extend the modeler
  4. Answers to occasionally asked questions (OAQ)
  5. Height Fields - an idea for triangles

Project Description

In this project you define a 3D model and its controls, and then display and operate the model.  The project skeletons include an executable file (animator) and a loadable library (modeler) that implement the modeling functions.  You provide another library that defines the actual  model and its controls.

Project Objectives

In this project you will use OpenGL to create and animate a character of your own design. You will become familiar with 3D hierarchical modeling and transformations.

What is a Hierarchical Model?

A hierarchical model is a way of grouping together shapes and attributes to form a complex object. Parts of the object are defined in relationship to each other as opposed to their position in some absolute coordinate system. Think of each object as a tree, with nodes decreasing in complexity as you move from root to leaf. Each node can be treated as a single object, so that when you modify a node you end up modifying all its children together. Hierarchical modeling is a very common way to structure 3D scenes and objects, and is found in many other contexts.

Project Requirements

First of all, you must come up with a character. This character can be composed solely of primitive shapes (box, generalized cylinder, sphere, and triangle).  It should use at least ten primitives and at least four levels of hierarchy. You must also use at least one each of the glTranslate(), glRotate() and glScale() calls to position these primitives in space (and you will probably use many of all of them!) You must also use glPushMatrix() and glPopMatrix() to nest your matrix transformations. The modeler has facilities for creating user interface widgets such as sliders, checkboxes, and menus and hooking them to different features of your model. You must use at least one of these to add a simple animation to your model - have your character do some simple action as you scrub a slider back and forth.

You are required to complete two bells (or equivalent) from the list below. Feel free to come up with your own ideas and pass them by us. If they're cool, we'll count them as bells and whistles.

Other than these requirements, you have complete artistic freedom on this, so be creative!

Some of your ideas may be implemented by altering the modeler library code in addition to your own model.  This is where the geometric primitives and  the color management code reside.

Note that it is possible to write out ray trace input files from the modeler also.  In project 3 you will be implementing a ray tracer, and many times it is interesting to ray trace models that you have generated using the modeler.  If you extend the modeler primitives, you may also want to provide the ability to write out ray trace information for that extended primitive.  Information about the ray trace input file format is available.

Bells and Whistles

One bell is worth two whistles.

[whistle] Change the default light source to illuminate your scene more dramatically.

[whistle] Allow for adjustable levels of detail for your character. You will need to add a UI control for this.

[whistle] Come up with another whistle and implement it.  A whistle is something that extends the use of one of the things you are already doing.  It is part of the basic model construction, but extended or cloned and modified in an interesting way.

[bell] Implement controls that allow changing or selecting the point of view.  Note that this includes changing the actual view parameters (eg, focal length), not just the model position.  You are encouraged to implement this bell, because it can be very helpful in working with and displaying your model to best advantage.

[bell] Use a texture map on all or part of your character. (This requires altering the implementation of the primitives shapes to include texture coordinates, or implementing your own primitives that do texture mapping.)

[bell] Build a complex shape as a set of polygonal faces, using the "triangle" primitive to render them.

[bell] Build a new primitive altogether in modeler.dll and use it in your model.  An example of this is a 3D curve primitive.  Implement the ray trace function in the primitive.

[bell] Make an additional animated sequence your character can perform.  Control the sequence with one or a few controls, or get_time().

[bell+whistle] Add some widgets that control adjustable parameters to your model so that you can create individual-looking instances of your character.  Try to make these actually different individuals, not just "the red guy" and "the blue guy."

[bell+whistle] Come up with another bell and implement it.  A bell is something that goes beyond the basic requirements of building a model and adds a significant new technical capability or artistic dimension to your model.

[bell+whistle] Give you character a recognizable way of expressing at least three moods (for example: happy, sad, and puzzled), and have it change its mood over time or in response to a control.  The reason there is a little more credit for this is that you are also expected to put some thought into the story telling aspect of the character.  Implement features or gestures that express a mood in a convincing way that seems natural.  Note that just changing color is not a mood change.

[bell][bell] Use some sort of procedural modeling (such as an L-system) to generate all or part of your character. Have parameters of the procedural modeler controllable by the user via control widgets.

[bell][bell] In addition to mood cycling, have your character react differently to UI controls depending on what mood they are in.  Again, there is some weight in this item because the character reactions are supposed to make sense in a story telling way.  Think about the mood that the character is in, think about the things that you might want the character to do, and then provide a means for expressing and controlling those actions.

[bell][bell] Come up with another heavy duty extension and implement it.  "Heavy duty" is something that explores an area of technical or artistic development that is interesting and well beyond the material presented in the basic lectures.