cos426.jpg (39279 bytes)

Computer Graphics, Spring 2004

Thomas Funkhouser


Assignment 3: Interactive Modeling
Due on April 5 (Monday) at 11:59 PM


Overview

The goal of this assigment is to introduce you to mesh representation, curve/surface smoothing, and modeling.  You will be creating a basic interactive modeling program for generating smooth surfaces that allows a user to drag vertices of a coarse control mesh in 3D while displaying an associated smooth surface. You will be asked to implement aspects of both the user interface and the subdivision algorithm, and finally use your program to construct several models.

Specifically, you will write a program that reads a set of triangle from a .ray file, builds a "control" mesh from these triangles (shown in green above), and displays it in a window using OpenGL. As the program executes, a user can subdivide the control mesh (each press of the `S' key subdivides one level further) to produce a smooth subdivision surface for display (shown in gray above).  The user may also drag vertices of the control mesh with the mouse while the corresponding finest level of the subdivision surface is updated continuously in the display.  To create the smooth surface, we will be implementing the Loop subdivision scheme.

You will construct the topology of the subdivided meshes only once, and after that update the geometry of these surfaces using the subdivision rules.  At the highest level, your program will juggle the following meshes:

Much work has been done on the properties and applications of subdivision surfaces, and below are some references for the curious.  Everything you need to know to implement subdivision should be in the course notes, however.


What You Have to Do

Implement an interactive subdivision surface modeling program, which reads a model file, subdivides it, displays it, lets you interactively move the original mesh around while updating the subdivided surface, and outputs the final coarse and fine mesh.  The inputs to the program will be a coarse mesh in the .ray file format (vertices and triangles only). The output of the program will also be a .ray file.

The assignment is worth 20 points. The following is a list of features that you may implement. The number in parentheses corresponds to how many points it is worth. Options in bold are mandatory.

User interface:

Mesh subdivision:

Create some models:

You should try to create the coarse model yourself, using whatever tools you want. For each of model, you need to submit a coarse mesh that, when subdivided without modification, results in your final model.

By implementing all the required features, you get 14 points. There are several ways to get more points:

It is possible to get more than 20 points. However, after 20 points, each point is divided by 2, and after 22 points, each point is divided by 4.


Getting Started

You should use the code available here (3.tar.gz, 3.zip) as a starting point.

The code we give you is able to load a .ray file and display it. It also sets up basic menus (click the right mouse button) and several keyboard shortcuts. This is just a starting point for the project, so feel free to change anything you want, but you will mainly need to modify the following files:

There are several support classes which you shouldn't need to touch:


What to Submit

You should submit one archive (zip or tar file) containing:

The writeup should be a HTML document called assignment3.html which may include other documents or pictures. It should be brief, describing what you have implemented, and how you created your models. Note if your writeup is very large you can just instead include a pointer to it.

Make sure the code compiles under Visual C++ or Linux.

Always remember the late policy and the collaboration policy.


FAQ


Last update 01/29/03, 4:41 PM.