Math 155B - Introduction to Computer Graphics - Winter 2004
 

Project #2 - Catmull-Rom and Overhauser interpolating splines

 

Overview:  For this assignment you will write a program that accepts points via the mouse, and draws a spline curve which interpolates them.  Your program will generate two kinds of curves: Catmull-Rom curves and Overhauser curves. 

Due date: Tuesday, January 27, midnight.

Your program should support the following:

  1. Left mouse clicks place points in the window.  The curve is updated on the screen interactively with mouse clicks.
  2. The curve interpolates all the points, including the first and last points.   This was not true of the Catmull-Rom and Overhauser splines as defined in class.  You may implement this is several ways, for instance by acting as if the first and last point are placed twice or by setting the first derivative is zero at the beginning and end of the curve.
  3. The c command ("c" for "curve") toggles between Catmull Rom and Overhauser curves.
  4. The f command removes the first point on the curve.  The l command removes the last point on the curve ("f" for "first" and "l" for "last").  If more than 64 points are placed, then the first point is removed.

I have written a skeletal version of the program.  The source code is available from the textbook's web page, or directly from http://math.ucsd.edu/~sbuss/MathCG/OpenGLsoft/ConnectDots/ConnectDots.html.   This program supports catching mouse clicks, the f and l commands, and clamping to at most 64 points.  It draws only straight-line segments, not curves:  your job is to add to the program the ability to draw curves. 
    The sample program has been written to attempt to draw big, black points and thick, colored lines and curves.  Whether this works on any particular machine is implementation dependent (a few years ago, I tried this program on four different machines, with as many different results.)  

A sample PC executable is available as CatmullRomDraw.exe.

Helpful hints:

  1. Start with the provided sample code.
  2. For each segment of the interpolating spline, draw it with a one dimensional Bezier curves (with glMap1f, glMapGrid1f, etc).   Use the GL_MAP1_VERTEX_3 version (setting z-coordinates to zero).
  3. Watch out for repeated points, so you do not get a divide-by-zero exception in this case.  Handle repeated points as you think best.
  4. If you have problems with dropped pixels in thick lines, this is an OpenGL implementation bug, and is not your fault.

Grading:  Grading is individual as usual.  Please do not modify your files after the due date.  You should be prepared to explain how your program works, and to show examples of the relative advantages and disadvantages of the Catmull-Rom splines and the Overhauser splines.