CS 248: Introduction to Computer Graphics
Pat Hanrahan
Assignment 3
Handed out: |
Tuesday, February 17, 1998 |
Due: |
5pm, Thursday, February 26, 1998 |
Overview
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/
lib/netscape/plugins:/usr/pubsw/apps/cosmo/local/lib/netscape/plugins
or run the following which will add it for you
/usr/class/cs248/assignments/assignment3/cosmoenv
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:
-
Some useful info can be found at http://vrml.sgi.com/develop/
-
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.
-
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.
-
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:
-
(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).
-
(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.
-
(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.
-
(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.
-
(15 points) Your scene tree should contain at least 10 total animated
joint transformation nodes.
-
(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.
-
(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.