CS3451: Project 4 (teams of 3 or 4)

Design, implement, test, and post an interactive applet with the following capabilities:

 - IMPORT: Import a triangle mesh from file and view it

 - SELECTION: Interactively move a selection point S on the mesh and automatically adjust the camera to follow S. Note that there is a whole spectrum of user-interfaces and interaction paradigms for moving S on the mesh. Design one that is a good compromise between implementation simplicity and usability (ease of use and effectiveness).  We would like to be able to navigate to any portion of the mesh in a few seconds. We may not need to have a very fine control on the position of S, so it may be enough to let the user select a desired triangle or vertex.

 - REGION: Select a region of influence R around S that has a user controlled radius r and visualize R be changing the colors of its triangles. Note that r may specify the distance in 3D, or along the surface of the mesh, or a graph distance in the connectivity graph of the mesh. The user should be able to increase/decrease R by pressing keys or moving the mouse. Recompute the selected region R around S when the R-key is pressed.

 - SUBDIVISION: When the user presses the S-key, perform subdivision of all triangles in R. To ensure that the mesh remains valid, triangles bordering R may have to be split in 2, 3, or 4 triangles. Hence, you will need to extend the software provided for subdivision to limit the edge-splits to only endges in R and to correctly split the triangles in R and the border triangles. To demonstrate your software, use a third color to identify these border triangles in the subdivided mesh.

 - WARP: Let the user translate and rotate a coordinate system C associated with S to another coordinate C'. Use C and C' to define a deformation that changes the mesh in R and produces a smooth shape. Here you need to design the user interface through which the user will specify C' and the mathematics of how each vertex V of R is mapped into its position W(R) in the warped model. Separate the two actions of (1) editing C' and (2) computing and performing the warp. For sake of simplicity and safety, you may want to initially restrict the transformation C-C' and the nature of the warp. For example, you could restrict C' to be a translatikon of C along the normal N to the mesh at S and to restrict the warp of each vertex V of R to be a translation along N or along the normal  N(V) of the mesh at V. The amount of translation will be a weight function of the distance w(|VS|). Then, when this works, try to add the capability of specifying rotations of C' and applying them, with effect diminishing with distance to the vertices of R. Design w() to ensure a smooth warp.

 - SIMPLIFICATION: The localized subdivisions performed before the warps may result in an oversampled mesh in flat regions. Hence, your software should offer a global simplification that would reduce the vertex count in flat regions. Please use the edge-collapse operator. You should decide what simplification parameters are exposed to the user (error estimate, vertex-count) and how you will estimate the error associated with each edge collapse. Then, implement the simplification as a series of edge-collapses ordered by increasing error estimate.

 - SMOOTHING: Finally, the user may want to smooth R by performing a series of smoothing steps, as long as the F-key is pressed. Use the smoothing module provided, but restrict it to R. Pay attention to what happens at the border of R and try to ensure that the smooth R is smoothly connecting to the rest of the mesh.

PROPOSAL: Before you start coding, post a proposal of the various modules and a schedule of who does what and when. Make sure that you include time for integrating the modules, for testing, and for documentation.  Your proposal should include a brief outline of the functionalities you plan to provide ("the user's experience").

DELIVERABLE: Post a write-up explaining the details of how you have designed, implemented, and validated each module and include images showing how it works. Also post an applet allowing the user to try all these things and provide some guidelines on how to use it. Structure your code into separate file, one per major module and include comments to help the reader understand your code.

TEAM A
TEAM B
TEAM C
TEAM D
Derrick Brown
Jason McGarr
Nick Bowman
Chris Octa
Taneshia Marshall
Alex Okafor
Wes Floyd
Emily Ewald
Daniel Razza
Hai Tan Phan
James Rintamaki
Catherine Herrington
Sangwoo Kim
Wu Zhan
Trung Lai
Robert Simpson
Douglas Miller