Assigned: Tuesday, September 21
Due: Monday, October 11 by 5:00 p.m.
Sep 24, 2004 — Posted sample halfedge code. (See below.)
For this project, you’ll be implementing a system for analyzing and smoothing meshes based on the eigenvectors of the mesh Laplacian. Your project should implement all of the following:
[10 points] Mesh Representation
Build some code to read in a mesh file and construct an appropriate data
structure to represent the mesh internally.
[20 points] Taubin Smoothing
Implement standard Laplacian smoothing using explicit forward Euler
steps. You should implement at least two weight schemes: (1) Unit
weights and (2) inverse edge length [Fujiwara] weights.
You should also
implement Taubin’s lambda-mu method.
The user should be able to specify arbitrary values for the lambda and
mu parameters.
[20 points] Eigenmeshes
Construct a Laplacian matrix for a mesh, and extract its eigenvectors.
Projecting the coordinates of the vertices onto this eigenbasis provides
an eigenmesh.
Note: For each of the 3 coordinate values
x, y, z you will have n
scalars – one per eigenvector.
Hint:
(1) Try this on small meshes and (2) provide a facility to save
and reload the eigenvectors once you’ve computed them correctly.
[20 points] Explicit Eigensmoothing
Having constructed an eigenmesh representation of the surface, you can
explicitly force all high-order frequencies to zero and reconstruct a
new smoothed surface.
[20 points] Mesh Equalizer
Chopping off the high-order frequencies corresponds to a box filter
transfer function. Provide a “mesh equalizer” that will let the user
interactively boost/limit different frequency bands. Obviously, you
must provide a non-trivial number of bands.
[10 points] Quality Code
Your code should be efficient and well-written. It should be easy to
follow and demonstrate quality design.
You’ll probably want to browse through our collection of links, particularly the Numerical Libraries section.
I’ve put together a collection of sample models for you to try your project on. Since we have a site license for Maya, you can also conceivably generate quite a variety of your own test models. If you generate anything particularly interesting, I’d be happy to add it to the menagerie.
If you choose to build a mesh data structure using a halfedge primitive, you might be interested in looking at the sample halfedge code that I’ve written.