CS426 Assignment 4

Assigned Nov. 9, 1998, due Sunday Nov. 22, 1998, 11:59pm


In this assignment you will create a curved surface modeller.

This is the first assignment for which you will work in teams of two. If you have trouble finding a partner, let us know as soon as possible. The next assignment you will have to work with a different partner.

Required features

The required curves and surfaces in a nutshell:

User I/O

You can write this program from scratch, extend your assignment 3 modeller, or work from a simplified version of your modeller, which at least has the following features:

Now add the following user I/O:

Put all created objects in your scenegraph.


Your program should be able to output to the screen and to an Inventor file. You may use the Inventor NURBS classes to render to the screen. You'll have to compute the Bezier curve yourself though, using a recursive approach. When writing to a file, the user has the option of writing all curved surfaces as soIndexedFaceSets with a certain resolution. Be sure to support general saving and loading (you may design your own format). Also submit a file which shows off the curves your program can create.

Camera paths

If your modeller didn't already have this feature, add it now: the user can specify an arbritrary number of camera positions and orientations. Use the positions as a control polyline to create a smooth camera path. Then the user has two options: fly along this path, or save the animation to separate image files. Make sure that the camera maintains constant speed along the path, but start and end with zero speed (for example slowly accelerate in the first second, and slowly deccelerate in the last). Also allow the user to specify the total number of frames in the movie.


Your writeup should contain at least the following items:

Relevant reading

Extra credit

If you implement all the required features, you'll score 15 out of 20 points. The extra credit options are:

The winning digit "4" for the art contest2 points (!)
Some predefined shapes. Have at least a paraboloid, hyperboloid (saddle), and torus1 point
Multiple Bezier segments patched together, allow the user to specify C0, G1 or C1 continuity1 point
Textures. Note that Inventor texturizes NURBS easily. You should create the texture coordinates for the tesselations. 1 point
When using Frenet frame for extrusions, gracefully handle cases where curvature vanishes or inverts. 2 points
Varying scale and rotation along an extrusion spine. Add the ability to edit 2D graphs specifying the amount of scaling and rotation along the spine. Specify the rotation using yaw, pitch and roll angles. 2 points
Be able to edit camera motion in a similar way to a full-fledged extrusion spine: 3D path, orientation (yaw,pitch,roll) relative to Frenet frame, zoom (instead of the extrusion scale), and velocity specified by splines 2 point
Objects with animation paths (same complexity as camera motion). 1 point
VRML 2.0 output, this time not using ivToVrml etc., but by writing the VRML yourself. Use the Extrusion node for both extrusions and surfaces of revolution.2 points
Error bounded tesselation: the user specifies the maximum distance between the curve/surface and the tesselation. Please explain/prove in your writeup how you guarantee the error bound.3 points
Nice looking seashells (see "Modeling seashells", Deborah R. Fowler, Hans Meinhardt, SIGGRAPH92, pp. 379-387)3 points

CS426, CS Department, Princeton University
Last modified: Sun Nov 15 13:23:07 EST 1998