Assignment 2: Progressive Meshes
Due: Monday, November 18 at 12:01AM
Overview
In this assignment you will implement a triangle mesh data structure and a viewer for
progressive meshes.
What You Have to Do
The assignment is worth 10 points. The following is a list of features that you may
implement. The number in parentheses corresponds to how many points it is worth.
Options in bold are mandatory.
- (1) Implement a triangle mesh C++ class.
- (1) Include a "Read" function to build a triangle mesh from a list of triangles.
- (1) Include a "HalfEdgeCollapse" function to merge one vertex of an
edge into the other.
- (1) Include a "Simplify" function that applies a sequence of half-edge
collapses until no more edges can be collapsed.
- (1) Include an "Error" function for evaluating the quadric error metric
for any vertex (see Garland97).
- (1) Modify your "Simplify" function to order half-edge collapses
according to your error metric.
- (1) Modify your "Simplify" function to store a record of half-edge
collapses (and equivalently vertex splits) to a file (see Hoppe96).
- (1) Implement a viewer that reads your file of vertex splits and applies them to
a mesh.
- (1) Include an interactive way to control the number of vertices
displayed in your interactive viewer. (see Hugues Hoppe's movies)
- (1) Augment your viewer to generate an image with selective refinement of the mesh based
on projected screen space area (see Hoppe96)
- (1) Augment your "Error" function to consider the error introduced in surface
color due to removing a vertex (see Garland98 or Hoppe99).
- (2) Augment your "Simplify" function to place vertices at the location
minimizing the quadric error metric (see Garland97).
- (2) Augment your viewer to include "geomorphs," smooth transitions as vertices
are added/removed from mesh (see Hoppe96).
- (5) Implement view-dependent progressive meshes with view-frustum culling and adaptive
refinement based on projected area (see Hoppe97).
- (?) Impress us with something we hadn't considered...
By implementing all the required features (in bold), you get 9 points. There are many
ways to get more points:
- implementing optional features (as listed above),
- submitting images for the art contest (1), and
- winning the art contest (3).
It is possible to get more than 10 points. However, after 10 points, each point is
divided by 2, and after 12 points, each point is divided by 4.
Getting Started
You can use the same code and data file formats as programming assignment #1 as a
starting point for your assignment. The syntax of the .ray file format is described here. A repository of sample .ray files is provided here. Resources (including papers about mesh simplification and multiresolution meshes) are available here. Please submit useful/interesting .ray files that
you create so that other students can test their programs on them.
What to Submit
You should email to me the location of an archive (.tar or .zip file) containing:
- the complete source code with a Makefile,
- any *.ray files you created
- the images for the art contest, and
- a writeup.
The writeup should be a HTML document called index.html. It should describe in
detail what you have completed and include images demonstrating the features you have
implemented (at least for the test scenes in models/box). For instance, you could
provide side-by-side comparison of images and execution times achieved by your program
both with and without a particular feature. Finally, your writeup should conclude
with a discussion of what you have learned -- e.g., which features are most significant,
under what circumstances does your code work well/poorly, what improvements would you
suggest, etc.