Overview
I implemented two surface subdivision schemes - Catmull-Clark and Doo-Sabin - and used the Halstead-Kass-DeRose method of efficient, fair interpolation. The program loads an obj file and outputs an iv file for viewing.
Pseudo-Code
- Load OBJ file
- Iterate through specified subdivision scheme a specified number of times
- Generate new vertices according to scheme
- Determine faces and edges
- Determine normals
- Output IV file
Catmull-Clark Subdivision
- Each face interpolates its vertices to created a new f-vertex
- Each edge interpolates its endpoints and the new vertices created by the faces it borders to create a new e-vertex
- Each vertex interpolates itself and all the new vertices created by the faces and edges it touches to create a new v-vertex
- New faces are determined by choosing a f-vertex and a v-vertex, then finding the two e-vertices that join them
Doo-Sabin Subdivision
- Each face interpolates its center and each of its vertices to create a new vertex for each old vertex
- Each face generates a new face of the same shape but smaller in scale.
- Each edge generates a face connecting the four vertices generated from its endpoints on the two faces it borders
- Each vertex generates a new face connecting all the new vertcies generated using itself
Project Basics
- Implemented Catmull-Clark Surface Subdivision
Project Extras
- Implemented Doo-Sabin Surface Subdivision
|
Subdivision Surface Comparisons
Cube
No subdivision
Catmull-Clark Subdivision - 3 iterations
Doo-Sabin Subdivision - 2 iterations
Dual Tetra
No Subdivision
Catmull-Clark Subdivision - 3 iterations
Venus
No Subdivision
Catmull-Clark Subdivision - 1 iteration
|