Overview
In this assignment you will implement an OpenGL robot that can be
controlled by the user. This assignment is loads of fun! The
earlier you start the more fun you'll have. Unlike previous assignments,
we are not supplying any skeleton code.
In this assignment you'll create an OpenGL
application entirely from scratch. Look at your OpenGL book, the GLUT
guide, and previous projects for guidance.
Refer to the course page for deadlines for this project.
What You Have to Do
The assignment is worth 100 points.
- Part I (30 points)
In the first part of the project you'll build a simple 3D
world with lighting, menus, and camera controls.
- (5 pts.) Build a 3D world with a tiled floor and three 3D objects.
- (10 pts.) Add ambient light as well as a point light. The point light should have noticable attenuation
across the tiled floor. All objects should be lit and at least one should be shiny.
- (5 pts.) Add menus that allow the user to toggle on and off ambient lighting and (independently) the point light.
- (10 pts.) Build camera controls that allow the user to reposition and reorient the camera easily. Also include a
zoom feature. To receive full credit your controls should be intuitive and easy to use!!
- Part II (30 points)
In the second part of the project you'll build a 3D robot using hierarchical coordinate systems and a scene graph. You'll also
build user controls for moving the robot.
- (5 pts.) The robot should have a head that turns and nods.
The robot should have a spot light on its head (like a miner's lamp)
that can be toggled
on and off.
- (5 pts.) The robot should have at least one arm that rotates at the wrist, elbow, and
shoulder (or some equiavalent depending on physiology).
- (5 pts.) The robot should have a body that can move around the floor.
- (10 pts.) The user should be able to access all controls through an intuitive and easy
to use interface. In addition, the user should be able to toggle the camera control to see
the world from the robot's perspective. It is not enough to simply implement an interface; to receive
full credit it must be easy to use.
- (5 pts.) Implement a help menu that explains all of the user controls.
Note: it is not necessary to build a general purpose scene graph as was
implemented in the ray tracer. You may either use an objected-oriented
approach with classes for each body component or a procedural approach
with draw methods for each body component. In either case you'll need
to expose control variables (e.g. position of robot, rotation angles,
etc.). Though we don't advocate global variables in general, we do want
to minimize the overhead associated with this project. In other words,
use them carefully.
-
Part III (35 points)
In the final part of project you'll add some bells and whistles.
-
(10 pts.) Build a simple roller coaster using a catmul-rom spline for the rails. (You should specify
the control points in your code but sample and draw the curve in real time.) The user should
be able to take a ride; i.e. move the camera along the rails (with toward and up specified
by the tangent and normal to the curve) at realistic speeds.
- (5) Make the robot do a cool robot trick and capture it
in an mpeg movie. The trick also should be accessible from the menu. An exceptional trick may garner extra points.
- (5) Add shadows using
the projection method with polygon offset.
- (5) Use "picking" for robot control.
- (5) Add reflections using the stencil buffer to prevent reflection
beyond the floor.
- (5) Add texture mapping.
- (10) Add bump mapping using a shader.
- (5) Create a portal using clipping planes. The portal should be represented graphically in some way, e.g. as two doorways.
- (5) Add a mirror (the floor does not count!). (Be sure to consider the
possible viewpoints; i.e. the robot can look in the mirror and see
itself.)
- (5) Add a billboarded object.
- (5) Add fog effects.
- (5) Win the best robot contest.
- (5) Win the best robot trick contest.
- (?) Impress us with something we hadn't considered.
By implementing all the required features, you get 70 points. Select options to bring your score to 100.
It is possible to get more than 100 points. However, after 100 points,
each point is divided by 2, and after 110 points, each point is divided by
4, etc.
What to Submit
You should submit a CD labeled CS155 Proj 3 with your name and the date and time of submission that includes
- the complete windows project file for your robot (it must compile and run on the
LAC machines)
- a writeup called assignment3.html that (a) explains how to operate the
robot and (b) enumerates the features you've implemented.
There are many opengl tutorials and demos online. You MAY NOT use any code off the web
unless you get explicit permission from me.
You get two late days for this project. They may be used to extend any intermediate or final deadline.
A 5 points penalty per day will be applied for additional delays.