Mixed semi-sharp cube example from [DeRose et al. 1998]

15-864 Assignment 1: Subdivision Surfaces


In this assignment you will get experience working with subdivision algorithms. This will also give you a refresher in writing OpenGL code in case it's been a while.


  1. Read a mesh from an .obj file and put it in a half-edge data-structure. We will provide C++ code for parsing .obj files, and some sample triangle-based and quadrilateral-based meshes.
  2. Subdivide the mesh using one of the subdivision algorithms discussed in class; namely, loop scheme, Catmull-Clark scheme, Butterfly scheme, Kobbelt scheme, or Doo-Sabin scheme (note that some of these schemes require a quadrilateral mesh!). You should also implement support for semi-sharp features, as in [DeRose et al., SIGGRAPH 98], and provide a simple example. (To automatically specify edge sharpness for a complex example, you might map control mesh edge-flap angles to sharpness values.)
  3. Display the subdivided mesh. Preferrably you should use the vertex positions and normals on the limit surface, e.g., formulae of limit positions and normals for Loop surfaces are given in the course notes, or in [Hoppe et. al 1994]. Provide some capability for switching between subdivision levels and also for moving the camera around the scene so we can view the entire mesh (and document this!).
  4. Turn in your full source code. Include a README file that summarizes what you did, any special build instructions, and how to control the UI.
    Update: Apparently a turn-in directory wasn't set up for this class yet; I'm working on that now but if you are in a hurry to turn it in you can email me (cdtwigg at cs.cmu.edu).

.obj files

You can find an obj file reader and some example code that uses it here. It depends on both the vl and boost libraries, both of which have been installed in a convenient location in afs (the Makefile includes all the appropriate paths; take a look at it for details). If you are curious about the .obj file format, Roy Riggs has a great summary.

Here are some test meshes (more to appear soon):

Also, check out Turbo Squid; it has a lot of free models. (Warning: Some of these models can have pretty gross mesh topology, since artists seldom care about the numerical properties of the meshes they create. Look before you leap and make sure your error checking code is okay. This will be a problem also when we are doing physically-based simulation.)

Additional tips


  1. Tony D. DeRose, Michael Kass, and Tien Truong. Subdivision Surfaces in Character Animation. Proceedings of SIGGRAPH 98. pp. 85-94, 1998.
  2. Hugues Hoppe, Tony DeRose, Tom Duchamp, Mark Halstead, Hubert Jin, John McDonald, Jean Schweitzer, and Werner Stuetzle. Piecewise Smooth Surface Reconstruction. Proceedings of SIGGRAPH 94. pp. 295-302, 1994.
  3. Jos Stam. Exact Evaluation of Catmull-Clark Subdivision Surfaces at Arbitrary Parameter Values. Proceedings of SIGGRAPH 98. pp. 395-404, 1998.
  4. Joe Warren and Henrik Weimer. Subdivision Methods for Geometric Design: A Constructive Approach Morgan Kaufmann, 2001.
  5. Denis Zorin, Peter Schröder, Tony DeRose, Leif Kobbelt, Adi Levin, and Wim Sweldens. Subdivision for Modeling and Animation. SIGGRAPH 2000 Course Notes. 2000.

Questions? Contact Christopher Twigg.