Final Project - CSE
167 - Fall 2004
Instructor: Sam Buss, Univ. of California, San Diego
Final Project - Create an individual
project using OpenGL.
Due Dates: Project finished by: Thursday, December 2, midnight.
deadline: 12:00 NOON, Wednesday, December 8th.
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
storage directory on
ieng9, under Class Resources. The
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 .sln and .vcproj 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 which includes the content of your readme file,
and shows off your project. .Your web page should show off your final
project in its best light. Many 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, Wednesday, December 8. Grading is on a scale of 1-10.
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 Professor Buss.
- You should spend 20-30 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 everything as planned, 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 used 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, spotlight,
shadows, 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. Special permission is
required from Prof. Buss for any joint projects.
- 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
substantial extension of the other code.
- You should 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 Fall 2003, CSE 167 final projects. Very similar to this course.)
(From Winter 2001, Math 155A. 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.
- 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.) Try adding
textures to items in the room, such as wood picture frames, or stylish ceiling
lights, or spotlights on the pictures, etc.
- 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
user control. (Or airplane, or space ship, etc.)
- 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
shooting.) Warning: this is not an easy project.
- 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!
- Create three (or five) balls that move around in a juggling pattern.
Add arms and hands that appear to toss them.
- Create a room with interesting items including a large mirror that shows a
mirror image of the room. Let the user be able to navigate through the
room with mouse buttons. (The OpenGL stencil buffer might be useful for
rendering a mirror.
- 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.
- Grading is based on both technical merit and on artistic merit.
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.