EECS 487, Winter 2007
Project 3: Sketch


In this project you will implement a simple sketch-based modeling system. The basic system supports two kinds of primitives (or basic shapes): boxes and cylinders. You can optionally add additional primitive types. Each type of primitive is matched to a set of input gestures, which are 2D strokes drawn by the user. The user can thus create a 3D scene interactively by "sketching" various primitives.

In addition to sketching shapes with the left mouse button, the user can move existing shapes around using the middle button. Every shape is given a constraint that limits how the shape moves when grabbed by the user via the middle mouse button. Initially, each object is constrained to move in the plane of the surface on which it was created. The user can interactively define new constraints to move the object in a different plane, or along a given direction. Primitives are organized into a hierarchy via nested transforms. When a new primitive is sketched on top of an existing one, it is added to the scene as a "child" of the existing one, meaning it is defined in the coordinate system of the existing primitive. When the existing one is moved, all of its children automatically move with it. But when a child is moved, it moves independently.

This project is loosely based on the SIGGRAPH 1996 paper: SKETCH: An Interface for Sketching 3D Scenes. (We will see the video in class.)

Support Code

You are given support code for this project and will need to
  1. link to the jot library (the same as for projects 1 and 2),
  2. copy the project support code, follow the instructions in the README file to compile, and
  3. implement the missing functionality.
For more information about jot, see the instructions given in project 1.

Note: Jot was updated a bit for this project. The previous versions should still work, but we recommend you use the newer version for improved rendering and better handling of input gestures. Pre-compiled jot on CAEN will be updated on 2/15 (after students turn in project 2).

Copy the project support code to your local machine.  (On windows, you can execute the following commands using cygwin, which we recommend):
  % scp -r .
(Note the 'dot' at the end of line.) The above command overwrites all proj3 files, including any files that you may have made changes to. To copy 'old' versions of files while leaving the new untouched (sync-ing operation):
  % rsync -avz .
(Do this from the parent directory containing the proj3 subdirectory.)

On (CAEN) machines, windows users can copy the files from:
This assumes that you mounted the eecs487 directory on CAEN as explained in the project 3 README. If you mounted the network drive differently, change the above path accordingly.


The tasks and grading scheme for this project are as follows:
These tasks are explained in more detail below.

    1. Comment your code reasonably, particularly your design decisions and choice of approach.
    2. Modularize your code: use a suitable number helper functions with descriptive names.
    3. Use descriptive variable and function names: apply a suitable tradeoff between symbol-length and descriptiveness.
    4. Learn about and use existing functionality in jot/mlib for working with points, vectors, lines, and matrices.
    Bottom line: Make your code readable! 10 points

Extended system (up to 15 bonus points):

The following are optional, but can be attempted by ambitious students:

Handing in

Turn in your proj3 directory, including:
  • all your project 3 source files
  • a subdirectory, 'images', containing images you created (e.g. anything you posted on the phorum)
  • no model files or binary files please!
  • a brief write-up in text format that discusses:
    1. anything about your implementation that is noteworthy, and
    2. feedback on this assignment, including suggestions for how it should be changed next time.
Name your file writeup-<uniqname>.txt . Example: writeup-rmanoj.txt

Copy your files to the following directory on IFS:

This path is accessible from any machine you've logged into using your ITCS ( password. Report problems to ITCS.
  • The timestamp on your key files (p3.C and your writeup) will indicate the time of submission and if this is past the deadline your submission will be considered late. Therefore, you are allowed multiple 'submissions' as long as you respect the deadline.
  • Test the compilation: Your submission must compile without errors and warnings (except those from external libraries like OpenGL, JOT etc.) on CAEN Linux or Windows machines. Mention the platform in your writeup. Code that doesn't compile will be heavily penalized. (There is no need to compile on IFS; we will do the grading using the CAEN setup.)
Multiple submissions:
  • You are allowed to overwrite your files in the above directory as many times as you want.
  • If the timestamp on these files is past the deadline your submission will be considered late.
  • Test this submission procedure and please let the GSI know well in advance if you encounter and problems.

Due date

The project is due on March 12, 2007, by 11:59pm. Turning it in 48 hours earlier is worth a 4% bonus; turning it in 24 hours early is worth a 2% bonus.

Last updated: February 14, 2007.