CS 248: Introduction to Computer Graphics

Pat Hanrahan

Assignment 3

Handed out:  Tuesday, February 17, 1998
Due:  5pm, Thursday, February 26, 1998


This assignment is designed to familiarize you with hierarchical 3D modeling and keyframe animation. The project will involve the creation of an object in the Virtual Reality Modeling Language (VRML) that will contain a number of animated movements that can be triggered by a user.

VRML is a language the allows you to describe 3D objects and environments. Users can enter these 3D environments and interact with the objects. VRML allows the objects to be animated and provides methods that trigger the animation through events such as a user "touching" them in the virtual environment. The language is less complex than a programming language such as C, but more complex than the standard HyperText Markup Language (HTML) that describes 2D web pages. For the assignment, you will have to write a description of your object and its actions in VRML 2.0.

The way in which objects are created in VRML is similar to that of OpenGL. In both, an object's geometry and material properties are defined, and the geometry is positioned by specifying and applying a number of hierarchically defined 3D transformations. VRML will be used instead of OpenGL because it automatically maintains many of aspects of the graphics state and interface, allowing you to focus on creating and animating the object hierarchy. Additionally, this will expose you to another way in which 3D models are created.

You can view VRML 2.0 files using Netscape 3.0 (or a higher version number) and a VRML 2.0 plugin viewer. The viewer on the Sweet Hall SGIs is called Cosmoplayer. The suffix of VRML 2.0 files is ".wrl". When Netscape and the plugin viewer are correctly setup you will be simply be able to open a location in Netscape with the ".wrl" suffix and view the VRML file. You will create an object by writing a VRML 2.0 file, have the file name end in the suffix ".wrl", and view the object by opening the file in Netscape.

You should add the following line to your ~/.cshrc file.

setenv NPX_PLUGIN_PATH /usr/pubsw/package/Web/netscape3.0.1/sgi_64/
or run the following which will add it for you
You will be using VRML 2.0 for the assignment. (Note: there is a lot of VRML 1.0 material on the web and it is not a strict subset of VRML 2.0. Make sure that you only use things that are VRML 2.0 compliant.) None of the textbooks for the class cover VRML 2.0.

There will be an Introduction to VRML 2.0 tutorial session held on Wednesday, February 18 from 7-9pm in B03 that will be broadcast on channel E1.

General information on VRML can be found at http://vrml.sgi.com. Online documentation and tutorials for VRML 2.0 information can be found at the following places:

  1. Some useful info can be found at  http://vrml.sgi.com/develop/
  2. A nice step-by-step tutorial of VRML 2.0 from SIGGRAPH 96 can be found at http://www.sdsc.edu/siggraph96vrml/course/toc.htm.
  3. A number of examples can be found at http://www.wiley.com/compbooks/vrml2sbk/toc/toc.htm and are a good reference for basic 3D transformations.
  4. One last place to look for reference info is  http://www.wasabisoft.com/Book/book.shtml
If you are interested in finding out more about VRML we suggest looking at the book The VRML 2.0 Handbook: Building Moving Worlds on the Web by Jed Hartman and Josie Wernecke. It should be available at the bookstore and is published by Addison-Wesley Developers Press.

Modeling an Articulated Object (50 points)

Your first task is to compose a scene tree which models an articulated object. We have provided some example of objects that we think at complex enough and your object can be anything from a skeletal figure to a mechanical object to a plant. Your object should contain the following properties:
  1. (15 points) The object tree should have a depth of at least 4, containing at least 20 transformation nodes, at least 1 of each type (scale, translation, rotation).
  2. (15 points) The object should contain at least 10 primitives using 3 different primitive types. You should make two versions of the model: a high-resolution version that contains all of the objects with a lot of detail (ie: has many polygons and looks smooth), and a version of the model that uses less than 200 polygons and closely resembles the high-resolution one. The low polygon count model is useful for display on machines without hardware graphics support, such as a PC, and allows many objects to be displayed in a multi-user environment without significantly decreasing the rate at which frames can be rendered.
  3. (20 points) Represent an interesting object. These 20 points will be based on how compelling and complex the objects is. 20 points will be given for an extremely interesting and complex object, 10 for one that resembles something and is moderately complex, and 0 for something that is simple and boring.

Animation (50 points)

Your next task is to animate both versions of your model with the same movements. The end goal is to make an articulated object that contains a number of interesting movements that can be triggered by user manipulation. For example, if you have a skeleton you could have it wave when the user clicks on its right arm.
  1. (15 points) The object should have 3 different animated sequences that are triggered by user manipulations. It is sufficient to have each sequence triggered by simply clicking on a part of the object.
  2. (15 points) Your scene tree should contain at least 10 total animated joint transformation nodes.
  3. (10 points) 1 of the object's animations should have the same configuration in the first and last frames of the animation and this action should repeat in a cyclical manner.
  4. (10 points) The animations should be smooth, with adequate keyframes to prevent sudden jumps, and the animations should depict a plausible movement. 10 points will be given for animations that look completely realistic and fluid, 5 point will be given for animations that are mechanical and well-executed, and 0 for ones that just make the object move through random rotations and translations.