CSCE 441: Computer Graphics

Fall 2017


Assignment 6: Subdivision Surfaces [60 out of 0 points]

Due 12/6/17

Purpose:
Here you will learn about higher-order representations of surfaces in 3D. In particular, you will implement a variation on Catmull-Clark subdivision surfaces.

Description:
You will implement code that first loads an OBJ file storing a quadrilateral mesh. The file format is the same as Assignment 4 except faces are now of the form:
f i1 i2 i3 i4
which specifies a face with four vertices. When the user presses the '+' key, you should subdivide the surface by first performing linear subdivision on the shape and then averaging as we discussed in class. If the user presses the 'L' key, you should linearly subdivide the surface. If the user presses the 'A' key, you should perform averaging on the surface (therefore '+' is the combination of 'L' followed by 'A'). Furthermore, the user should be able to zoom in on the shape by dragging the right mouse button up and down as well as rotate the shape (both horizontally as well as vertically) by dragging the left mouse button.

You should render the object lit by at least one light, which means calculating normals of the faces (Flat Shading should be used). You should also use OpenGL to do all of the rendering and lighting as well as hidden surface removal. You may find the chapter on "Lighting" in the Red Book helpful for setting up the light parameters (p. 210 in the 7th edition).

Here are some quad models for you to try: cube, knot, monster frog.

Grading:
[10] Correctly loading the OBJ file and displaying the object
[4] Proper lighting
[3] Hidden surface removal
[4] Zoom ability with mouse
[4] Rotation with mouse
[16] Linear subdivision
[16] Averaging
[3] Correct behavior when pressing the specified keys

Include a readme.txt with your assignment specifying what pieces you implemented.

Note: The late policy will not apply to this assignment. Turn it in on time or there will be no credit.