- bin
output for executables - data\models OBJ models
- data\patchlists files storing lists of patches in OBJ format
- include
header files shared by vc projects - lib
output for libraries - temp
intermediate output of parametarization editor - vcproj\DCEL a library project for doubly connected edge lists and geodesics
- vcproj\OBJModel a library project for simple OBJ model manipulation
- vcproj\ParameterizationEditor an executable project for parameterization editor
- vcproj\PatchList a library project for patch list manipulation
- vcproj\RayTrace a library project for ray tracing and intersection tests
- vcproj\utilites and vcproj\cUtilites library projects for commonly used functions
- vcproj\DCEL\dcel.cpp doubly connected edge list implemetation
- vcproj\DCEL\geodesic.cpp compute geodesics on a surface represented in a doubly connected edge list
- vcproj\DCEL\resampling.cpp move points of a OBJ model to a surface represented in a doubly connected edge list
- vcproj\OBJModel\OBJModel.cpp manipluate obj models
- vcproj\ParameterizationEditor\ParameterizationEditor.cpp a simple GLUT program for editing a patch list and performing parameterization optimization
- vcproj\PatchList\patch.cpp manipulate a patch
- vcproj\PatchList\patchList.cpp manipulate a patch list
- vcproj\PatchList\patchcreation.cpp help create patches on a surface represented in a doubly connected edge list
- vcproj\RayTrace\raytrace.cpp commonly used functions for ray tracing and intersection tests
- vcproj\RayTrace\boundingbox.cpp naive implementation of hierarchical bounding box
- vcproj\utilities\jacobi.cpp diagonalize symmetric matrices
- vcproj\utilities\vector3D.cpp operation on 3D vectors
- include\boundingbox.h
- include\common.h
- include\dcel.h
- include\dumpscreen.h
- include\geodesic.h
- include\jacobi.h
- include\OBJModel.h
- include\patch.h
- include\patchcreation.h
- include\patchlist.h
- include\raytrace.h
- include\resampling.h
- include\standard.h
- include\vector3D.h
- include\vptree.h
- GLUT
- cUtilites (contains some third party code)
- OBJModel model an input surface
- DoublyConnectedEdgeList dcel the DCEL of the input surface
- PatchList patchList patches which lie on the input surface
- PatchCreation pc A helper for creating patches and modifying patches
- OBJModel *initialParameterization an initial parameterization in OBJ format
- GUI states x 12
- A patch is a polygon, typically a quadrilateral, whose vertices lie on a given surface represented in a doubly connected edge list
- A patch list is a list of patches. Connected patches may form another mesh and the connectivity is, again, repersented in a doubly connected edge list
-
Start up with arguments With the function, int main(int argc, char** argv), the program normalizes the surface, converts the surface into a DCEL, removes points without any connection in the DCEL, converts the DCEL into a triangular mesh if it is not, validates the DCEL, loads the patch file, and initializes openGL states and create a GLUT window
-
Edit a parameterization with the program
-
Keep minimize stretch With the function, void PatchList::optimizeParamerization(const double weight[]), the program, for each vertex in the vertex set of the patch connection, computes all the geodesics connecting it to its neighbors, computes a tangential vector, T, which indicate the magnitude and the direction of movement of this vertex, computes a geodesic whose first derivative matches T, and moves this vertex along the geodesics such that the magnitude of movement matches ||T||
- Project parameterization for recovery With the function, void PatchList::projectParameterization(OBJModel &initialParameterization, unsigned int gridDensity), the program takes input points on an intial parameterization in OBJ format, projects the initial parameterization onto a given surface represented in a doubly connected list, and outputs the final parameterization in a doubly connected edge list where each face is a patch and the list represent patch connection as a whole
Esc exit 1 generate a rhombic dodechedron parameterization 2 generate an icosahedron parameterization 3 generate a cube parameterization +/- Increase (/ decrease) the resampling resolution [/] Undo (/ redo) geometry A Enable (/ disable) auto-save a Enable (/ disable) automatic flipping triangle (/ quad) orientation d Remove an inserted point D Remove a selected face e Show model edges f Show model faces F Flip model face orientation G Project parameterization onto the surface H/h Manual k Mark (/ unmark) the selected point as a anchor point L/l Load a patch list m Reduce parameterization stretch Q Begin (/ end) a quad strip q Begin (/ end) quads r Reset view S Save a model dcel s Save a patch list T Begin (/ end) a triangle strip t Begin (/ end) triangles V Validate the model dcel v Validate the patch list dcel u Update search trees
- In some rare cases, geodesics cannot pass the validate() function which checks a list of properties of valid geodesics
- OBJModel.cpp has only handled a limited number of tokens
- When converting a OBJ model into doubly connected using convertFromOBJModel(), vertices of each polygon have to be ordered in anti-clockwise order. Automatic ordering has been implemented but has not been tested completely.