Half-edge meshes and Catmull-Clark subdivision

Half-edge meshes and Catmull-Clark subdivision

In this project, I wrote code for importing .obj meshes and converting them to a half-edge mesh data-structure that supports arbitrary edge splitting, face triangulation, and Catmull-Clark subdivision (mesh smoothing).

A half-edge datastructure encodes mesh adjacency and connectivity, requires constant-size storage, enforces proper topology, and can be traversed starting from any arbitrary component (face, vertex, or half-edge).

The Catmull-Clark subdivision algorithm smoothes a half-edge mesh by inserting new vertices into the mesh and quadrangulating its faces. The result is a B-spline surface with the mesh’s original vertices as control points.