Implementation

 

As my cs779 project, I implemented some variations of the Loop subdivision scheme for triangular meshes.

 

Data Structures

 

Even though the subdivision framework is intuitive and seems easy, a number of queries need to be performed fast at each step. This requires some indexing mechanisms.

There are many data structures available (half edge or winged edge), but for each of them there is a trade-off in terms of efficiency and generality.

I opted for a data structure that is more general and less efficient. However, since the subdivision algorithm is exponential in the number of faces and vertices, efficiency should be considered carefully.

 

The triangular mesh consists of two arrays: a vertex array and a face array. Vertices of each face are indexed in the vertex array and conversely the faces adjacent to each vertex are indexed in the face array. Therefore, we can perform most types of query efficiently.

 

Software Features

 

Load up obj files and .m files

 

The “m” files are the files found at Hughes Hoppe web-site

Editing functionality

Create new faces and new points. Move points.

Cannot delete points, but I can delete faces

Editing functionality

Reorient edges or faces

 

Editing functionality

Mark edges as sharp and vertices as corners

 

Simple average subdivision scheme

The averaging algorithm presented in Warren subdivision book

I used his evaluation algorithm which has interesting behaviour on non-manifolds.

Loop subdivision

Basic Loop subdivision

 

Preserve sharp features

 

 

Preserve corner vertices

 

 

Boundary Lock

Forces the subdivided surface to match the boundary

Useful for C0 continuity on merging operations.

Detection of corner vertices and boundary edges

 

 

Sharp edge detection based on Dihedral angle

 

 

Subdivision animation

Animated transition from the initial mesh to the subdivided surface

 

Saving functionality

It saves pictures and obj models

 

Capturing functionality

It saves the animation as a sequence of frames

 

Extrude functionality

 

Hard constraint on the order of vertices

Morphing

Morph the subdivided surfaces assuming that the initial meshes are isomorphic

Linear and cubic interpolation