EECS 598-1: Winter 2002

Programming Assignment 3: due 3/25/2002 at 11:59pm

In this assignment you are asked to implement the Catmull-Clark subdivision scheme for closed meshes (no boundaries). A simple mesh framework is given that implements some bogus subdivision scheme. Thus all the datastructures are in place. You will need to implement the following:

  1. (40pts) Catmull-Clark subdivision as described in section 2 of Halstead et al. This will involve implementing a procedure that takes a mesh on some level and produces the mesh on the next level. Do not worry about the interpolation and fairing portion of the paper.
  2. (30pts) A procedure that will produce a limit position for every point -- add an additional field into VertexT and store it in there. Add an option to the rendering procedure so that it will render not the control points of the current level but their limiting positions. See Appendix A of Halstead et al. for the limit mask (it is denoted as l^1 in the paper).
  3. (30pts) A procedure that will produce a normal vector for every point -- store it in the normal field of VertexT. The smooth shading should work properly after you've done this. See Appendix A of Halstead et al. for the normal masks (they are denoted as l^2 and l^3 in the paper).

The archive(code and data):

pa3.zip

After compiling run the code: Debug/pa3.exe 2 data/almost.obj

A number of OBJ files on which your code will be tested are included in the archive.

Updated 3/14: Explanatory supplement

Papers:

Misc

My code may have some bugs. Please let me know as soon as you find any.

The provided code should compile under Visual C++ 6.0. With a proper makefile it should also compile on other platforms. Do not forget to check if glut.h file is in the standard include/GL folder. If it is not please download GLUT package from the web at www.xmission.com/~nate/glut.html