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.

General:

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 method:

The problem you need to solve is how to deform the mesh surface smoothly when one mesh vertex is moved by the user.
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.

Mesh renderer sources (containing GLUI library) and gtbmouse project (if you need to recompile it)
Sample VRML files and some more files

We provide a Visual Studio 6.0 project that loads and renders meshes. The project uses OpenGL for rendering,
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, wireframe,
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, open
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.

Here you can download the GLUT library if you don’t have it:
GLUT page
GLUT for Windows

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)

Contact:

If you have questions about the code (or if you find serious bugs), contact Olga Sorkine:
e-mail: sorkine@tau.ac.il
Phone: 03-6405360
Schreiber 002

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 :-)