EECS 487, Fall 2006

Project 3: Sketch




Overview

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. Extended versions of the system support additional primitive types such as spheres, ducts, surfaces of revolution, and extruded shapes. Each primitive type 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.)

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.

Support Code

Copy the project support code to your local machine.  (On windows, you can execute the following commands using cygwin, which we recommend):
  % scp -r red.engin.umich.edu:/afs/engin.umich.edu/class/perm/eecs487/proj3 .

(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 red.engin.umich.edu:/afs/engin.umich.edu/class/perm/eecs487/proj3 .

(Do this from the parent directory containing the proj3 subdirectory.)

Windows users can use set up an sftp session to red.engin.umich.edu and grab the files from the above path or, on (CAEN) machines with AFS mount, copy the files from:

    K:\perm\eecs487\proj3

Note: the above path depends on how CAEN space is mounted on your PC. See the project 3 README file if you need help mapping a network drive to connect to the course directory.

The C++ source code files are: axis.C axis.H floor.C floor.H node.C node.H node_manip.C node_manip.H p3.C sketch_pen.C sketch_pen.H. These provide useful functionality, but not everything is implemented. Read through these files to get familiar with them, then implement the following missing functionality (usually marked by the phrase "YOUR CODE HERE"). You are permitted to modify any of the provided source files as you see fit.

Basic primitives:
Moving objects:
Renderer:
Scene design:
Write-up:
Code quality:
  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.
    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:
            /afs/umich.edu/class/eecs487/f06/submit/<uniqname>/p3/

This path is accessible from any machine you've logged into using your ITCS (umich.edu) 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 November 8, 2006, 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: October 31, 2006.