Progressive Meshes....sort of


By Kyle Haughey, for Zoe Wood's CSC 570R, Winter 2006


Progressive meshes are a continuous level-of-detail representation for 3D models (as opposed to discrete levels of detail). They work by iteratively removing edges from an original, detailed mesh to obtain meshes with lower and lower detail. Each time an edge is removed, information about the removal gets stored in a "vsplit" record, which can then be used to reconstruct the edge later. After a number of iterations (it is common to iterate until some criteria about the mesh are true), you are left with a coarse base mesh and many vsplit records. To construct a mesh with any level of detail between the coarse mesh and the original mesh, you simply inject edges (via vsplit records) until you achieve your desired detail level.

The original idea for this project was to write a program that would load a traditional mesh (represented as vertices and faces) from a file and output it to a progressive mesh format, allowing the user to perform a qualitative analysis of the resulting levels of detail at various distances from the camera. What I actually ended up implementing, however, falls significantly short of my original goals.

When I started implementing this project, I decided to create my own mesh data structure and functions for manipulating meshes. Dr. Wood recommended that I use an existing mesh class so I could concentrate on implementing the progressive meshes algorithm, but I stubbornly insisted on starting from scratch. This decision was what ultimately prevented me from completing the project. I spent the vast majority of my time on this project creating the mesh data structure and an edge collapse function. Due to severe time constraints, these two features were the only aspects of progressive meshes that I was able to implement before the project was due.




Key Commands:

Ctrl+I Import a mesh from a *.m file
Ctrl+E Toggle rendering of mesh edges
Ctrl+F Toggle normal inversion
Ctrl+M Smooth each vertex in the mesh
Ctrl+H Toggle smooth shading
C Select a random edge and highlight it
Z Collapse the currently selected edge
N Collapse a random edge
P Collapse 20 random edges


A selected edge before edge-collapse

The result of the edge-collapse

A simplified mesh after many edge-collapses