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.

Loop Subdivision iteratively subdivides the mesh to have more faces.


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


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

