Topics in Computer Graphics
Mesh Editing exercise
IMPORTANT: Please contact me by e-mail to schedule a date for final submission. You need to come to my lab (Schreiber 002) and present the project, as well as to submit the source code with some documentation (user manual and your algorithmic decisions). The submission has to be next week (15–19/6).
IMPORTANT: You must
submit a design document right after Passover vacations (April, 27). The
document should contain 3-4 pages
where you describe what are you going to implement, the precise choice of your algorithms (such as hierarchy strategy, any special
data structures, the numerical solver you have chosen, etc.). Of course we recommend you to start implementing as well, since the end
of the semester usually approaches faster than one expects.
The goal of this exercise is to
design and implement a small editing system for 3D triangle meshes. The user
should be able
to load a mesh from a VRML file and manipulate its geometric shape by selecting and moving vertices. The deformation that
is caused to the mesh surface as a result of moving vertices, should be smooth, i.e. the resulting mesh should approximate
a smooth surface. Moreover, several levels of control should be available: on the coarsest level, moving a vertex causes
a "large" (global) change to the surface, and on the finest level, only a small local change should happen. This is meant for making
the modeling process simpler for the artist: on the course level, he/she shapes the overall look of the mesh, and on finer level
smaller and finer details are shaped.
The problem you need to solve
is how to deform the mesh surface smoothly when one mesh vertex is moved by the
The deformation should be proportional to the "level" selected by the user. Your assignment is to use relative coordinates
for this purpose. Get a detailed explanation here.
We provide a Visual Studio
6.0 project that loads and renders meshes. The project uses OpenGL for
GLUT and GLUI for managing the windows and gui. If you don't have GLUT installed, follow the links below
to obtain it. The GLUI library and header are included in the project, but you may want to look at the documentation
on the GLUI homepage, to learn how to use it and add new controls to the application (it is very simple).
The application allows to load
a triangle mesh from a VRML file and render it in different modes (solid,
solid with edges, draw vertices as small balls, etc...). To choose specific rendering options, work with the Rendering Modes menu.
Navigation: to rotate
the mesh, hold down the left mouse button and move the cursor. To zoom in/out,
also hold down the Ctrl key.
To move the mesh, hold down the Shift key.
Picking: the also code
provides a basis for "picking" vertices: you can choose a vertex by
right-clicking on it (the selected vertex is marked by
a yellow ball), and move it around while holding the right mouse button (only the vertex itself moves right now, you need to implement the
deformation of the rest of the mesh). When you also hold down the Ctrl key, the picked vertex moves in the viewing direction (orthogonal
to the screen); if you don't hold Ctrl, the vertex moves in the plane parallel to the screen.
Output: you can also
save the result in VRML format or get a screen capture to a PPM image (can be
viewed with Irfanview). To do this,
the Save As... menu, enter the filename you want (and Enter) and click on the appropriate button.
To learn about the modules and the data structures in the project, refer to the readme.txt file.
You can of course use another
renderer and/or write your own application if you like. The provided
application is by no means guaranteed
to be bug-free or particularly efficient. It can be a reasonable basis to start, and you can modify and augment it at your own will.
GLUI homepage (additional
GUI such as buttons, arcballs, checkboxes, etc., built on GLUT)
There you can also find references to books on OpenGL. Recommended crash-course
in OpenGL and GLUT – OpenGL Superbible (available at the library).
Irfanview (a viewer for PPM and PGM images)
TAUCS (library for solving least-squares problems)
If you have questions about the
code (or if you find serious bugs), contact Olga Sorkine:
You can also ask other
questions, but keep in mind that this is a research assignment, so I don't
know the answers to many questions, it's up to you to invent them :-)