Math 155A - Introduction to Computer Graphics – Spring 2022
Instructor: Sam Buss, University of California, San Diego

Final Project (Project #7), Create an individual project using OpenGL
Due date: Friday, June 3
       Projects may be completed as late as Sunday, June 5 without point deduction.
       If it is later than that, please request an extension.

       Final projects may be graded beginning Monday, May 30, and must be graded by early the following week.  You will be able to sign up for a personal grading time. Time slots will be starting in week 10.  The last time slots will be on Wednesday morning, June 8.
The grading rubric is available as Rubric_Project7_Spring2022.pdf

Goals: Design and create a significant OpenGL program. Create a PDF file documenting your project.  Evaluation will be based on technical and artistic and creative merits.  One-on-one zoom grading with a TA and/or Professor Sam Buss; in addition, a PDF report and source files should be uploaded to gradescope.

What to hand in:  

·        Place in a zip file

o   All C++ source and header files that is custom for your project. You should not upload the standard source files provided by the course.

o   All of your texture map (bitmap) files.

o   All GLSL shader program files.

o   A PDF report with discussion of your final project. This is an important part of the project, so please spend a little time on it.

§  What the features? Especially discuss anything new that was not present in earlier projects.

§  How is it run? (Keystrokes, etc.)

§  What was the inspiration?

§  What did you (successfully) implement?

§  Where did you find our texture maps, if any?

§  Include One to three images, showing attractive views of your project.

·        Upload the zip file to gradescope:.

Get an individual zoom grading session with Professor Buss or a TA, no later than Wednesday morning June 8.  If you wait until June 6 (Monday) to get graded, you will need to make a timed appointment. If you get graded during the tenth week of classes, grading is “drop-in” and on demand.

Make sure your texture .bmp files are not too large. This can done be in Paint on Windows (Use the “resize” button, and shrink the size, maintaining the aspect ratio.) If your texture map files are huge, you may be able to reduce their size substantially without losing much image quality. This will help make your program load textures faster, and make it easier upload to gradescope.


1.      Pick a project of your choosing.  Guidelines for this include:

a.      Your program must use OpenGL in the spirit of this course. 

b.      You should spend approximately 6-15 total hours of work on the final project.  If you find yourself spending over 10 hours, please cut the project short. In any event, you should not spend substantially more than 15 hours on the project.

c.      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 to demo.

d.      You should incorporate some technical aspect of OpenGL or computer graphics that is new (that is, technical tools not used in any of your earlier projects).

e.      Simpler examples of new technical content could be include: navigating a scene with the keyboard controls (e.g,. moving the viewpoint left/right and up/down); polygon offset to avoid z-fighting; mouse controls; the use of more extensive animation; animated texture maps. More advanced uses of new technical content could include more advanced uses of texture maps such as cube maps; shadows; mirror effects; the use of Bezier curves; etc.

f.       Your project should not be an adaptation of code from outside Math 155A (e.g., downloaded code).  

g.      Some suggested projects are listed next.

2.      Some suggested project topics include:

a.      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 and the next suggestion are fairly common as projects and have been done a lot in prior courses, but please embellish it in some way, say by choosing an interesting theme.)   Try adding textures to items in the room. Suggestions include three dimensional wood picture frames, or stylish ceiling lights, or spotlights on the pictures, or a curved sculpture, etc.  You can use glPolygonOffset to place flat images (e.g., paintings, windows, rugs) onto walls or floors without z-fighting.

b.      Design a dining room or living room, etc. with furniture. Be creative with use of GlGeom shapes, or model shapes of your own.  Use textures.

c.      Model a scene with a shiny object that uses an environment map (a cube map).

d.      Design a scene with water and reflections. (Warning: this one is really hard to do well.)

e.      Design an outdoor scene.  Maybe a cottage or mountain.  Again, use textures.

f.       Model a city scene, with some streets and buildings. Use textures.

g.      Model a simple robot.  Animate it.  Make it walk or dance or respond to keyboard controls.  (This kind of animation can be hard.)

h.      Model a space ship, a death star, a toaster, or some other technological device.  Possibly give it some animated behavior.

i.       Build a simple car and a region (or a track) where it can be driven under user control. 

j.       Build a simple game, where the user controls the game play with the keyboard (or even the mouse).

k.      Build a virtual roller coaster.  Let the user's viewpoint follow along (in or behind) the roller coaster car.  Include some interesting scenery.

l.       Or: Be creative!  Make your own suggestion.

3.      In class, we will see examples of last year’s student projects.

4.      The suggestion is to use the Project 6 files as a basis for your final project. These contain most of what you will need to work with surfaces, materials and lights. If you want materials that do not use Phong lighting, you can achieve this by using purely emissive Phong materials.

5.      It will be an excellent idea to talk about your project in the preliminary design stage with me or with one of the TA's.  We may be able to give you some pointers on how best to approach your project.  This is strongly suggested!

6.      Grading will based on technical merit, artistic merit, and creativity.

7.      Include in the zip file:  All primary source files (C++ and GLSL) written specifically for the project and all texture (.bmp) files.  Please do not make the bitmap files too large.

8.      How to write the PDF report. Call it “Project7report.pdf” (This name exactly, same capitalization!) It must have:

a.      Your name on the first page, near the upper left corner. (YOU MAY LOSE POINTS IF YOU DO NOT DO THIS.) Do not include your student ID.

b.      Half a page to two pages: Discussion of your final project. What was the inspiration? What did you (successfully) implement? What did not get implemented? What keyboard controls are supported? Where did you find your texture maps, if any? List the features of the program, being especially sure to discuss anything new that was not present in earlier projects. The project PDF report should be complete enough so that it fully describes the project.

c.      One to three pictures showing attractive or informative images of your projects.

Grading is on a scale of 0-40. (The final project is worth twice as much as other class projects.)