Mesh Processing

Triangle meshes are the standard representation for 3D objects in many graphics applications. I implemented geometry processing functions able to subdivide, simplify, and denoise meshes.

The processing relies on the atomic operations edge split, flip, and collapse. These operations are done in constant time through the use of a half-edge data structure. A validate function is used to verify the sanity of the mesh after processing.

Atomic operations

Loop Subdivision iteratively subdivides the mesh to have more faces.

Icosahedron
Icosahedron after subdivision

Quadric Error Simplification iteratively collapses edges, maintaining surface error approximations using quadric matrices.

Cow
Cow after simplification

Bilateral Mesh Denoising smooths out noise in the mesh, filtering vertices of
the mesh in the normal direction.

Face
Face after denoising