The final homework assignment can be done in teams of up to three people, or individually. Each team will need to implement an interactive software application which uses some of the advanced rendering effects or modeling techniques we discussed in class. We will evaluate your project based on technical and creative merits.
The final project has to be presented to the entire class during our final exam slot from 3-6pm on Thursday, December 18th in our usual classroom (Center Hall 214). It will be graded by the instructor, the TAs and the tutors. Late submissions will not be permitted. You are allowed to bring guests to the presentation if seats are available.
For the presentation, you need to bring a laptop with a VGA or HDMI output (make sure you bring any necessary adapters). If nobody on your team can bring a computer to the presentation, you can use the instructor's laptop, but you will need to test out your application at least a day ahead of time to make sure that it will work (even if it is not the final version). The presentation should ideally be done by two people: while one person speaks to the audience, the other one operates the computer. At least one person from each team must show up to present the project.
Your application needs to run in full screen mode, with the OpenGL window size maximized. It is not acceptable to run your application in a 512x512 pixel window like you did in the other homework projects, because it would be hard to judge the image on the screen.
Your score consists of three parts:
- Blog (10 points)
- Presentation (90 points)
- Optional: Documentation (10 points)
You need to create a blog to report on the progress you're making on your project. You need to make at least two blog entries to get the full score. The first is due on Wednesday, December 10th at 11:59pm, the second is due on Wednesday, December 17th at 11:59pm. Each blog entry gets you 5 points.
The first blog entry needs to contain the following information:
- The name of your project.
- The names of your team members.
- A short description of the theme/story of your demo.
- The technical features you are implementing.
- What you are spending your creative efforts on.
- A screen shot showing the latest state of your application.
The second blog entry needs to update any of the above information that changed by then.
You are welcome to add more blog updates as you like.
To satisfy this requirement, send the URL for the blog to the instructor at: jschulze [at} ucsd.edu.
80% of the score for the presentation are for the technical features, 20% for the creative quality of your demonstration. The grading will be based solely on your presentation! What you don't show us won't score points. Each team will have one minute per team member for the presentation.
To obtain the full score for the technical quality, each team member must implement either two easy algorithms, or one harder algorithm.
Your score for creativity is going to be determined by averaging the instructor's, the TAs' and the tutors' subjective scores. We will look for a cohesive theme and story, but also things like nice 3D models, nice textures, the choice of colors and materials, the placement of camera and lights, user interaction, fluidity of rendering, etc.
Here is the list of technical features you can choose from:
- Per-pixel illumination of texture-mapped polygons
- Moving the camera or objects in the scene along a path defined as a piecewise Bezier curve, for example to render a ride on a roller coaster
- Toon shading (important: needs to make sense for your theme)
- Procedurally modeled city
- Procedurally modeled buildings
- Bump mapping
- Displacement mapping
- Glow effect
- Particle effect
- Collision detection with bounding spheres or boxes
- Animated Bezier patches (two or more patches with C1 continuity)
- Environment mapping
- Shadow mapping
- Shadow volumes
- Procedurally generated terrain
- Procedurally generated plants with L-system
- Shape grammar for buildings or objects
- Screen space algorithms, such as post-processed lights, lens flare, ambient occlusion
- Collision detection with arbitrary geometry
If you want to have debugging support from the TAs and tutors, you need to implement this project in C++ using OpenGL and GLUT, just like the other homework projects. Otherwise, you are free to use a language of your choice, you can even write an app for a phone or tablet as long as you can send the image to the projector for the presentation.
Third party programming libraries are generally not acceptable, unless cleared by the instructor. Exceptions are typically granted for libraries to load images and 3D models, libraries to support input devices, or support for audio. Pre-approved libraries are:
- GLee to manage OpenGL extensions
- SOIL to load a variety of image formats
- SDL as a more versatile replacement of GLUT
- OpenAL for audio support
- Any XML parser, such as MiniXML or PugiXML
- The math library GLm
Optional Credit: Documentation
We are going to compile a web page on your projects, similar to this one, for future classes. To get the extra credit, you need to add a final blog entry with all the information that was asked for in part 1 (Blog) and a link to a short video clip. The projects web page we create will list your first names but not your last names with your project, unless you instruct us otherwise.
The video clip should be about 60 seconds long and showcase your application. The videos are going to be graded on the day after the project presentations, the deadline for them is December 19th at 9am. The video needs to run in Media Player on a Windows 7 computer.
To shoot the video, it is acceptable to just point a cell phone camera at your computer screen and hit 'record' while you walk the viewer through the application. Or you can use screen recording software, such as the free CamStudio. There does not need to be an audio track, but you are welcome to talk over the video.
- If you use Sketchup to create obj models: Sketchup writes quads whereas our obj reader expects triangles. You can convert the Sketchup file to one with triangles using Blender, a free 3D modeling tool. Then you put the object into edit mode and select Mesh->Faces->Convert Quads to Triangles.
- MeshLab is another excellent and free tool for 3D file format conversion.
- Trimble 3D Warehouse and Turbosquid are great resources for ready-made 3D models you can export to OBJ files with the above described technique.