Project 2: Subdivision Surfaces

Assigned: Tuesday, October 28

Due: Friday, November 14 before 5:00 p.m.




Requirements

This project is focused on quadrilateral-based subdivision surfaces. You will implement an interactive program that can read a control polyhedron and display the resulting subdivision surface at varying levels of subdivision.

I encourage you to browse the subdivision course notes. The "Subdivision Zoo" and implementation chapters will probably be particularly helpful.

[20 points] Mesh Representation
For this assignment, I expect you to implement your own mesh representation data structures. You’re free to use half-edges, quad-edges, cell lists, adjacency lists, or any other structure you can imagine. You should turn in with your project a description of the data structure you used and why you made the specific design choices you did. You may of course consult other code written by others for design ideas. If you do this, you must provide details on what code you’ve looked at.

[20 points] Catmull-Clark Subdivision
You should implement the Catmull-Clark subdivision scheme (see Subdivision Zoo for a reminder of the details of this scheme). Note that repeated subdivision is acceptable. You do not necessarily need to compute the limit positions of vertices.

[20 points] Barycentric Subdivision
Recall that another approach to subdivision is to: (1) average vertices into dual "face points" and (2) average face points around a vertex to compute a new position. (These are the VF and FV steps described in the Oswald and Schröder paper.) You should implement this scheme, allowing a user-specified number of repetitions of the averaging process. This will give you higher-order surfaces.

[15 points] Creases
You should support user-specified sharp creases for at least one of the above subdivision schemes. At minimum, a user should be able to select one or more edges which will be preserved as "sharp" features.

[15 points] Boundaries
Your code should correctly handle the case where the base polyhedron has an open boundary.

[10 points] Quality Code
Your code should be efficient and well-written. It should be easy to follow and demonstrate quality design.

Sample Models

The following are some base polyhedra for you to use in testing your program. I created them in Maya, and you can easily create more of your own either by hand, or using the Maya software installed in the CSIL labs.

You might also want to try some of the example models from Project 1.

Handin

You must hand in all the following things:

  1. All source code that you have written.
  2. Any other file necessary to make your software compile.

To actually hand in your project:

  1. Package all your files in a single archive (either .zip or .tar.gz are acceptable).
  2. E-mail this archive to me at garland+handin@cs.uiuc.edu prior to the handin deadline. If your project is too large for e-mail, you can contact to make other handin arrangements.

After the due date, we will be arranging times for you to demo your project to me. These demos are required to receive a grade on the project.


Last modified: Sun Dec 14 16:10:51 2003