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

Final Project, Create an individual project
Due date: Sunday, June 10 at 11:00pm.
            
Project plans should be discussed (by email is OK) with Professor Buss by Monday, June 4.
            Projects may be graded starting Wednesday, June 6.

Goals: Design and create a significant OpenGL or RayTrace program. Create a PDF file documenting your project.  Evaluation will be based on technical and artistic merits.  One-on-one grading with Sam Buss and/or; in addition, an executable with all accompanying files must be uploaded to a dropbox folder, along with your most significant source code.

What to hand in: There are two components to what you must hand in. 
   
When you are done, place your C++ files, executable, and Visual Studio solution/project together in a separate folder in your PC computer account in the APM basement labs.  The program must compile and run on these computers.  Grading will be personalized and one-on-one with the TA or with Sam Buss.  Project grading can start as early as Wednesday, June 6 (10th week of classes) and should be completed by Wednesday, June 13th (finals week). Friday, June 9 (the final day of lectures), but grading is possible during finals week until Wednesday.
     Also, turn into a gradescope:

1.       a PDF document describing your project,  Include your name, but not your PID.  Unless you request otherwise, it may be shown to the class during the project demo session during finals week. This should be 1-3 pages in length, and include (a) A paragraph or several paragraphs 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.  To create images, you use may use CNTL-ALT-PRINTSCREEN. You may also use RgbImage to export high-quality bitmap files, from either OpenGL or from the RayTrace project.

2.      An executable file and any necessary texture files or .glsl files. Professor Buss should be able to run your code inside this folder.  Check this works on the lab computers in a separate folder before doing the upload.

3.      A separate folder with you significant source code. Do not upload project files, solution files, or files you did not modify.

We will schedule a Demo session on either Wednesday or Thursday (finals week) to demo everyone’s projects to the rest of the class.

INSTRUCTIONS:

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

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

b.      You should spend approximately 10-15 total hours of work on the final project.  If you find yourself spending over 10 hours, please consider cutting the project short.

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.      Grading is based on technical merits, artistic design, and creativity.

e.      Your project should not be an adaptation of code from outside Math 155A/B (e.g., downloaded code).   In some cases, we can give an exception to this, but only if your project includes a substantial extension of the other code and only if you discuss this with Professor Buss ahead of time.

f.       Some suggested projects are listed below under "4.". 

2.      You must discuss with Professor Buss your plans for the the final project by Monday, June 4. Discussion can be email, but in person is strongly preferred.

3.      Turn in the items listed above.

4.      Some suggested project topics include:

a.      Build a RayTrace scene.  Some ideas include:

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

                                                  ii.     Design a dining room or living room with furniture.  Use lots of textures.

                                                 iii.     Model a scene with a shiny objects and transmissive object such as glass and water.

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

                                                   v.     Include distributed ray tracing as appropriate.

b.      Build a scene with animation. Some sample ideas.

                                                    i.     Use quaternions or B-splines/Bezier curves to control motion or orientation. 

                                                  ii.     Extend the Glsl water waves project to include more features, e.g. include water in a scene and simulate reflection and/or refraction with texture mapping.

                                                 iii.     Build a robot.  Animate it.  Make it walk or dance or respond to keyboard controls. Try to make the motion look realistic, or interesting.  (This kind of animation can be hard to do well.)

                                                 iv.     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 a button.

                                                   v.     Model a space ship, a death star, a lamp, a toaster, or some other technological device.  Give it some interesting animated behavior.

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

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

                                              viii.     Make a simple video game.  Warning: lots of work!

                                                 ix.     Make a movie by exporting a sequence of RayTrace images.

c.      Try some new uses of Shader programs; or multi-pass OpenGL rendering. For example, look up how to use shadow mapping.

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

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