Assignment #2:
Mesh Simplifier

Submission date: Friday, 10/24/14, 23:59

Objective:

Implement a vertex-removal based mesh simplifier. Experience the difference between understanding a geometry processing algorithm on a theoretical level and actually implementing it.

Tasks:

  1. Implement a vertex-removal based simplifier with a basic simplification metric (sum of incident angles over 2*pi). Have a UI in place to repeatedly remove one vertex at a time and triangulate the resulting hole (70%).
  2. Develop an interface (and data structures) for your simplifier that allow the user to efficiently remove any number of vertices in one step (10%).
  3. Develop an effective visualization mechanism for your algorithm to show the next 10 verts to be removed (5%)
  4. Either develop a method for smart hole triangulation which ensures that triangle normals do not flip (decide what to do if no such traingulation exists) OR implement a more sophisticated eror metric such as distance to the approximating plane of the neighboring vertices or a volume metric. (15%)
  5. To receive a bonus you can:

Instructions:

  1. Implement a mesh simplifier based on vertex removal. Start with a basic sum of angles over 2 pi metric and then (if you choose) replace with the distance to plane and/or volumetric metrics described in class. It should compute the metric for each vertex and store the vertices in a queue based on the metric. Based on a user input (see item 3 below) it should simplify the mesh as instructed, by removing as many vertices as necessary, in an order determined by the metric. The error metric should be updated as explained in class to reflect the changes in the mesh around the removed vertex. Disallow vertex removals if they create illegal topology.
  2. You can make the following assumptions in your work:
  3. Your API should support the following mesh operations, performed repeatedly and in any order:
  4. To visualize the simplification process and ensure correctness you should provide the following visualization tools (similar to the demo in class). You should provide an interface option (e.g. menu button) allowing the user to switch the visualization on and off. Following the assignment specification is some code to help you with visualizations.
  5. Test for illegal operations (e.g. running simplification when no mesh is loaded) and issue an appropriate error message if one is performed.
  6. To receive a bonus you can implement a progressive mesh data structure allowing you to restore the mesh to any size. In this case your API should support a restore operation that reverts the mesh to any previous size (number of vertices). Allowed sizes should be between the current and the original ones.

Submission:

Send an email to Alla with the subject DGP assign2 containing a zip file with your code. Submit your sources only.
Don't forget to include a README file explaining how to run your code.
In the email write your name and contact e-mail address.
All email should be received by Friday, 10/24/14, at 23:59.

You can use your grace days (if you still have them). No late assignments, beyond those, will be accepted.

This assignment is 15% of your final grade.


Hints

Simplification amount

A few easy ways to approach this:

Visualization

This will be more difficult, but there are a number of options: