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

Final Project, Create an individual project using OpenGL
Due date: Friday, March 15, 9:00pm
             Projects may be completed as late as Monday, March 18 without point deduction.
            Final projects may be graded beginning Wednesday, March 13.
Due to clashes with Math 18, we may need to shift computer lab hours during Week 10.

Goals: Design and create a significant OpenGL program. Create a PDF file documenting your project.  Evaluation will be based on technical and artistic merits.  One-on-one grading with a TA and/or Sam Buss; in addition, files must be made available via gradescope.

What to hand in: There are two components to what you must hand in. 
    One-on-one grading in the APM Lab with Professor Buss or one of the TA’s.
The program must compile and run on these computers as usual. Grading can be “on-demand”; but also you can sign up for a times to grade the final project. It is hoped that most projects be graded no later than Monday, March 18 (final exam), but there will be a chance to get graded Tuesday or Wednesday if necessary..
     Turn into to gradescope a single zip file containing:
1. A PDF document describing your project,
(see item 2 below)
2. An executable file and any necessary texture files and .GLSL files.
3. Copies of the source files which contain the major new material you wrote.

For  your files: The PDF document MUST be named “FIRST_LAST_finalproj.pdf” where “FIRST_LAST” is your first and last name.  The main executable file MUST be named FIRST_LAST_finalprog.exe”.  It must be able to run when placed in the same directory as the rest of your files.

BEFORE YOU TURN IT IN: (1) Create the ZIP file. (2) Extract the ZIP file into an empty folder. (3) Run the executable in the folder where it was extracted.  (4) If it runs correctly, you may now upload the ZIP file.  Otherwise, go back to step (1), and recreate the ZIP with the files in the correct folders for executation. 

HINTS: The executable file can be found in your “Debug” folder. Alternately (and somewhat better) create a “Release” version in Visual Studio, and use the executable that is in your “Release” folder.  (The Release version is better, but does not lend itself to debugging.)
      You will need to include any GLSL files and BMP files in the same folder as your executable before creating the ZIP file.

MORE HINTS: Make sure your texture .bmp files are not too large. This can 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 also make it easier upload to and download from gradescope.

INSTRUCTIONS:

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-10 total hours of work on the final project.  If you find yourself spending over 10 hours, please cut the project short. In no case should you spend 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 or surfaces; 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 below under "3.". 

2.      Turn in the following items:  Items a., b. and c. should be put in a zip file and uploaded to gradescope:

a.      A PDF file describing your project. This should be 1-3 pages in length, and include (a) A paragraph describing what is included in your project. (b) Documentation explaining how to run the program, including keyboard controls, etc. (c) One or more pictures showing your scene.  Include your name, but NOT your student ID in the PDF.

b.      Your executable and any necessary files (i.e., texture maps and .GLSL files).

c.      Source files for your new code (you do not need to include code that was taken from earlier projects).

d.      Place in the basement lab computers: A folder containing: The PDF file with a description of the project, the Visual C++ project files, the source code and the executables and supporting materials (such as texture maps) in the basement computer labs. This needs to compile and run in the computer lab for grading.

3.      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, so please embellish it in some way.)   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.  Use lots of 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. (This one is 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.

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 virtual roller coaster.  Let the user's viewpoint follow along (in or behind) the roller coaster car.  Include some interesting scenery.

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

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

5.      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. If you want to use cube maps, please let me know.

6.      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. 

7.      Grading is based on technical merit, artistic merit, and creativity.