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.
Rather, you'll create an OpenGL
application from scratch.
Refer to the course page for deadlines.
What You Have to Do
The assignment is worth 100 points. The required features (in bold) total 75 points. Choose options to bring your grade
up to 100 or more. (Points beyond 100 are discounted as in prior assignments.) You can garner 5 points by being able to
demo 50 points worth of functionality by the date given on the course web page (approx. one week after start of project).
- (5 pts.) Build a 3D world with a tiled floor and three different 3D objects.
- (5 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!!
-
(10 pts.) Build a robot that has a body, a head that turns and nods, and at least one arm that rotates at the wrist, elbow,
and shoulder (or something equiavalent depending on physiology).
-
(10 pts.) The user should be able to move the robot around the world and control its head and arm movements
through an intuitive and easy to use interface.
- (5 pts.)
The robot should have a spot light on its head (like a miner's lamp)
that can be toggled
on and off. (Node: The light should move when the robot's head turns or nods.)
-
(5 pts) The user should be able to toggle the camera position in order to see the world from the robots perspective.
(Note: When in this mode, the view should change when the robot turns or nods its head.)
- (5 pts.) Implement a help menu that explains all of the user controls.
-
(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 pts.) Make the robot do a cool robot trick and capture it
in an mpeg movie. The trick also should be accessible from the menu. A really great trick may garner up to 5 bonus points!
- (5 pts.) Add shadows using
the projection method with polygon offset.
- (5 pts.) Use "picking" for robot control.
- (5 pts.) Add reflections using the stencil buffer to prevent reflection
beyond the floor.
- (5 pts.) Add texture mapping.
- (10 pts.) Add bump mapping.
- (10 pts.) Add a "portal" using clipping planes.
- (5 pts.) 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 pts.) Add a billboarded object.
- (5) Add fog effects.
- (5 pts.) Win the best robot contest.
- (5 pts.) Win the best robot trick contest.
- (5 pts.) Demo 50 points by first deadline.
- (?) Impress us with something we hadn't considered.
What to Submit
You should upload a zip file to your wiki that includes the following
- 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
- your robot movie.
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 deadline.
A 5 points penalty per day will be applied for additional delays.