CS4620 Introduction to Computer Graphics
CS4621 Computer Graphics Practicum
Fall 2009


Dec 14: Final exam solution posted.

Dec 7: CS4620 Fall 2008 final exam posted

Dec 4: Rendering contest entries

Nov 18: Homework #8 is out (due Mon Nov 30)

Nov 11: Homework #7 is out (due Wed Nov 18)

Oct 21: Homework #6 is out (due Wed Nov 4)

Oct 14: Homework #5 is out (due Wed Oct 21)

Oct 14: Progr. Assign Pipeline is out (due Nov6)

Sept 16:  Progr. Assign Model is out (due Oct9)

Sept 11:  Homework #3 is out

Sept 9: CSUGLab account access enabled. Please visit http://www.csuglab.cornell.edu/userinfo reset your password. Net-print, access to lab door and MSDNAA will be activated shortly.

Sept 8:  Prof. James added Mon 11am office hr

Sept 7:  Homework #2 is out

Sept 7:  Practicum room change (stay in Phillips Hall 101)

Sept 2:  Progr. Assign Ray 1 is out

Sept 31:  Homework #1 is out

Aug 26:  Welcome!
    First 4620 class is Fri Aug 28.
    First 4621 class is Wed Sep 2.



The schedule is subject to change.

Date Topic Materials
02 Sep Subdivision overview

Assignment overview
(See below)
Design document

No class

Design document discussion
Hand in design document
Design meetings

Design meetings (cont'd)

Design meetings (cont'd)

Design Milestone
In-class presentations
11 Nov Design Milestone (cont'd)
In-class presentations
18 Nov Individual meetings (last class)

25 Nov No class (Thanksgiving)
Dec No class (NSF panel)

Dec Final presentations Note: During regular CS4620 time (2:30-3:20)

Milestone 0: Design document (Due Oct 7)

This 4–5 page document should cover the following aspects of your plans for your project:

  1. Define your 3-5 person group.
  2. Which extensions and refinements you are planning (be very specific).
  3. The software architecture you will use to implement the basic requirements. This includes the main classes in your program and your plans for implementing each of the requirements within that structure. Particular features to plan carefully for: undo; animation; animated drawing; rendering to movies.
  4. The data structures you'll use to support the more involved parts of the project, in particular efficient editing of subdivision surfaces.
  5. Your plans for the user interface. How will you handle selection and manipulation of vertices, edges, and faces? How will animation work? How will the UIs of your extensions work? Provide mocked-up screenshots, sketches, or other images to show what the UI will be like.  Hint: try exploring Blender (or other modeling software) before you make these decisions.

Subdivision Modeler assignment

Basic requirements:

  1. Application mechanics
    • Full save/load support for entire scene state
    • Import of OBJ meshes
    • Many-level undo for all operations that affect the scene in any way.
  2. Edit triangle mesh geometry.
    • Allow selection of sets of vertices, edges, and faces
    • Interactive editing of vertex positions
    • Recommended: Allow for storing extra named attributes with vertices, edges, or faces. This can increase modularity by avoiding the need for the mesh code to be aware of all possible attributes that might need to be stored.
  3. Loop subdivision surfaces.
    • Interactive editing of control vertex positions with continuous view of effects on limit surface.
    • Sharp edges
    • Approximation of limit surface, including pushing vertices to limit surface and computing limit normals for rendering.
  4. Animation
    • Interactive specification of transformations at key frames over time.
    • Smooth interpolation of transformation parameters (will not work well for some rotations).
    • Rendering from separate, animated camera
    • Support for rendering a movie to MOV, AVI, or other format.

Sample refinements:

  1. Export limit surface in Ray format or other useful formats.
  2. Other subdivision rules (e.g., Butterfly).
  3. Soft selections for mesh editing.
  4. Animation using linear blend surfaces (morph targets).
  5. Variable sharpness edges.
  6. Rendering extensions: bump mapping, reflection mapping.
  7. Quaternion interpolation of rotations.

Sample extensions:

  1. Multiresolution editing with edits at finer levels defined in terms of tangent frames from coarser levels.
  2. Animated deformers to be applied to the output mesh.
  3. Mesh editing: add vertices, split faces, swap edges, etc.
  4. Adaptive meshing for approximation to limit surface.
  5. Texture coordinate editor that allows vertices to be laid out in 2D, then generates texture coordinates by subdivision.
  6. Displacement mapping, producing nice adaptively tessellated surfaces for rendering.

You are required to implement the basic requirements plus:

Refinements and extensions can be from these lists or they can be your own inventions of similar scope. For the final hand-in you will demo your modeler to the whole class, and also hand in a short rendered animation produced using your system.


  1. design document including data structures, class structure, and UI design.
  2. basic mesh editing working (including undo), and basic subdivision working.
  3. all basic requirements satisfied.
  4. final presentation including extensions and refinements.

Grading is 15% each for 0, 1, 2, then 55% for 3. For each milestone we will have an individual meeting with each group, to be scheduled via CMS.


Appendix: Exploring Blender

Before you begin building your modeling program, you might like to familiarize yourself with existing 3D modeling software packages. Blender, is an open-source modeling package that can be downloaded from blender.org. The best advice for learning the software, is to up it up and fiddle with it for a while, browse the user manual, and follow along with some tutorials. Play with the subdivision tools. Think about how the designers solved the problems inherent in providing the user an interface to complicated structures like meshes, motion over time, and large collections of buttons and controls. Do you like their solutions?

A concrete learning exercise is to create a model with a hierarchy of transformations. It could be whatever you want—a stick-figure person might be a canonical example—and it does not need to be fancy; simple boxes or blobs for the parts are fine. It just needs to have parts (e.g. the legs) that can be moved independently by adjusting the transformations, and some of them need to contain other subparts (e.g. legs containing lower legs).