CSE 167 - Introduction
to Computer Graphics - Fall 2003
Instructor: Sam Buss, Univ. of California, San Diego
Final Project - Choose a project of your
own using OpenGL.
Page of student's final
projects now available for general viewing.
Due Dates: Project finished by: Thursday, December 4, midnight.
deadline: 12:00 NOON, Tuesday, December 8th.
Deadline to discuss preliminary plans for your project with TA or Buss: Friday, November 21.
Goals: Design and create a significant OpenGL program that
incorporates new aspects of OpenGL. Evaluation will be based on technical
and artistic merits.
What to hand in: (1) Make a directory called
FinalProject in your CSE 167 home directory. (The CSE 167 home directory on
ieng9, under Class Resources, not your "My Documents"
file modification dates will serve as a time stamp so we will know files have
been turned in on time. Place, in that directory, all your source
files and project files (including .dsp and .dsw files), plus any
texture files or other resources used by your project. Also, place a
file called readme.txt that describes you project, how you implemented and
documents how to run your program.
(2) You must upload also, a thumbnail GIF file, a full
size screenshot and an HTML file. Most of you will also want to upload
also your executable file, and include directions on how to run the program.
A few of you may want to upload more sophisticated set of web pages.
As usual, grading will be personalized and
one-on-one with a TA or with Sam Buss. Your program must run on the PC
lab, you must come into the PC lab and meet one of us. You will have to show
your source code, run the program, possibly make changes on the spot to your
program and recompile as requested by the grader, and be able to explain how
your program works and why it renders what it does. Your files should be
complete and project must recompile in the ieng9 directory.
You will then come see a TA to get your work graded. This grading MUST
be done by NOON, Tuesday, December 4, and we prefer that it be done earlier. Grading is on a scale of 1-8 as usual.
(3) In addition to making the projects available on
the web, we will give special recognition to some of the projects, say in
categories such as "Best Artistic Content", "Best Animation", etc.
Exact details of awards will be decided by Buss and his TA's at the end of
quarter. Sorry, no
financial awards, just recognition.
FOR FINAL PROJECT:
Pick a topic of your choosing. Guidelines for this
- Your program must use OpenGL / GLUT in the spirit of this course.
Exceptions to this must be pre-approved by Buss.
- You should spend 20-25 total hours of work on the final project. If you find
yourself spending more than 30 hours, cut the project short.
- Design a project that can be implemented in stages, so if you get stuck on
one part and cannot complete all you planned to, you will still have a project
- You should incorporate some technical aspects of OpenGL or computer graphics that is new (that
is, technical tools not in the earlier projects).
Examples of this new technical
content could include the use of texture maps, mouse controls, the use of
extensive animation, transparency and blending, environment maps, the use of
Bezier curves or surfaces, etc.
- It most cases, the project should be independent work of one student.. Joint projects
should be undertaken ONLY with prior permission and only if the responsibilities
of different contributors are distinctly delineated.
- You should not use code from outside CSE 167 (e.g., downloaded code).
In rare cases, I may give an exemption to this, but only if you project a
substantial extension of the other code.
- You MUST discuss with a TA or Professor Buss what your project will be, not
later than Friday, November 21. A good time to do this would be at the
same time you have Project #4 graded.
- Some suggested projects are listed below under "3.". You can find old sets of similar projects for my courses and others at the
(From Winter 2001, Math 155A. Very similar to this course.)
(Not all of these would be appropriate as projects for our course.)
http://www.student.cs.uwaterloo.ca/~cs488/gallery-A5.html (A rather stunning
set of the best final projects from a undergrad/grad course at U. Waterloo.
That course covers ray tracing, which we do not cover until next quarter, and
many of their projects are raytraced. Still their projects may provide
- You will
need to turn in the following items:
- All documentation, source code and executables and supporting materials
(such as texture maps) in your CSE 167 ieng9 home directory, named
- Create a file named readme.txt or readme.html that describes all relevant aspects
of your project. This includes a short description of the project and its
aims and how well you met your aims. It should also contain documentation on how to run your
program including all controls. In addition it should discuss the algorithms or
techniques you used. This file should be 1 or 2 pages of text.
It should be placed both in the FinalProject directory and be on, or
accessible from, your HTML page.
- Create an HTML file index.html and image files that show off your
project. This HTML file and associated files let you create a
web page (or set of web pages) that present your project. So please take
some time to make your HTML files and web pages are well-designed to "sell" your
project. Include in the HTML file a short description of the project
(probably taken from your readme file). If appropriate, include the
executable file and the necessary texture files in a zip file that can be
downloaded via your HTML page. Also, include one or more images generated
by your project and have your HTML page display them.
- Create a image file called thumb.gif in the same format as was
used for Projects 3 and 4. (Its dimensions should be 160 pixels wide and
120 pixels high.)
- Put the readme file and the files thumb.gif and index.html and all associated
files invoked by your index.html together into a zip file. (Yes,
this might put a zip file inside a zip file, this is OK!)
- Upload your files into the Final Project area for the
CSE 167 course.
- Verify that the files are correctly uploaded and that your html file is set
up so that people can access all the files. Files now finalized for
general public viewing.
- Some suggested project topics include:
- Design a museum room. Include artwork as texture maps. Include
lights, benches, wood floors, rugs, doors, etc. if you wish. The user
should be able to navigate the scene and change view direction with keyboard or
mouse controls. (This is a fairly standard project, but you can embellish
it in many ways. A lot of potential museum artwork is available on
the internet or from scanning from picture sources.)
- Make as artistically designed room with interesting furniture,
architectural details and/or decorations.
- Build a robot. Animate it. Make it walk or dance or respond to
- Build a model of a robot arm. Let the user control joints with
keyboard controls. Perhaps there is a goal, such as to make the robot push
- Model a space ship, a death star, a toaster, or some other technological
device. Possibly give it some animated behavior.
- Build a simple car and a region (or a track) where it can be driven under
- Build a virtual roller coaster. Let the user's viewpoint follow along
(in or behind) the roller coaster car. Include some interesting scenery.
- Take photographs of a room or two from around UCSD or from your
residence with a digital camera. Also take photographs of furniture.
Make a three-dimensional model of this area and its furnishings in OpenGL, using your
photographs as texture maps. Allow the user to navigate with arrows or
other keyboard controls around the scene. (Sort of like Quake without the
- Use transparency to build a fish bowl (for instance). Warning:
in the past this has proven to be a very difficult project to implement well.
- Make a simple video game. Warning: lots of work!
- Be creative! Make your own suggestion.
- It would be a excellent idea to talk about your project in the preliminary
design stage with me or with the TA's. We may be able to give you some
pointers on how best to approach your project.
PLEASE: talk to a TA or me about your project idea by Friday, November
TECHNICAL SUGGESTIONS (watch this space for updates):
Texture mapping images.
- Make sure your images have enough resolution, but not more than needed for
- Use mipmapping.
- Convert your image to bitmap format (.bmp). Use the supplied
sample code (at
http://math.ucsd.edu/~sbuss/MathCG) to help load and manage texture maps.
- If you apply a texture map to a quad that is a portion of a wall or other
large flat surface, use polygon offsets to avoid z-fighting. For example:
a picture on museum wall.
- Do not re-load the texture map, or even re-mipmap it, every time through
your draw loop. Do it once per texture map (as in the FourTextures
- Blending and transparency.
- It is usually necessary to render all transparent objects from back to
front to achieve consistent and attractive results. (Painter's algorithm.)
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) is usually the
best blending function specification.