Curves

CS426 Assignment 4

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

Introduction

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:
• 2D & 3D curves (all cubic, both open and closed forms):
• Bezier (4 control points)
• Catmull-Rom (any number of control points)
• uniform B-spline (any number of control points)
• 3D curved surfaces:
• Tensor product surface
• extrusion
Implement extrusions using a spine and a crosssection. Varying scale and rotation is extra credit (see below). Let the user choose the default orientation of the cross section between the Frenet frame and the world coordinate system. The Frenet frame is the coordinate system that "follows" the spine (it is given by the tangent to the curve, the curvature vector - that is, the derivative of the tangent, and their cross product). So, if no rotation is given and the default orientation is the Frenet frame, the crosssection should always be perpendicular to the spine. You may assume that the curvature never vanishes or inverts. (a necessary condition for this is that the spine should have C2 continuity) For extra credit, handle those cases gracefully.
Take a look at this webpage for an explanation of the VRML 2.0 Extrusion node. Note that the VRML extrusion uses piecewise linear specifications, while you will have to implement it using smooth continuous splines.
• surface of revolution

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:

• create, position, etc. sphere/cone/cube/cylinder
Now add the following user I/O:
• switch between 2D and 3D mode (or have more windows)
• ability to create/move etc. 2D curve control points + feedback on coordinates (e.g. coordinates, show axes/grid...)
• the same for a 3D control grid (for a B-spline surface)
• the same for a 3D extrusion path and a 2D cross-section in 3D (for an extrusion)
• and finally, for a 2D curve and rotation axis in 3D (for a surface of revolution)

Put all created objects in your scenegraph.

Output

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.

Writeup

Your writeup should contain at least the following items:
• the names of you and your partner (you can run submit from either account)
• how you implemented the Bezier curve
• how your program computes indexed facesets for the various surfaces
• how you implemented the camera path routines
• features you did not implement
• an explanations of extra features

• the Angel book, chapter 9, "Curves and surfaces"
• the Inventor Mentor, chapter 8, "Curves and surfaces"
• the lecture notes of lecture 9, "Curves"
• lecture 10 notes, "Surfaces"

Extra credit

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

FeatureValue
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