Project 2
CS 481/681 2007 Homework, Dr. Lawlor
Project Requirements
This project must be done individually.
There are four deliverables for each project: project topic, code
draft, presentation, and final code. EACH SECTION HAS EQUAL WEIGHT IN
YOUR GRADE! Everything should be turned in
electronically via Blackboard.
- An HTML "Topic" paper, under a page long, describes what you plan to
do. It's due on Tuesday, April 10th.
- Describe exactly
what you're planning to accomplish. A screenshot
(which can be from a website or paper, as long as it's clearly
referenced) might a good aid. If the method is described
in a book or website, a citation is very appropriate.
- The purpose is mostly for us to negotiate on the scope of the
project, so for your own sake please be clear what you're building.
- Reference at least three similar projects or reference works you think will be useful.
- An executable code draft due Tuesday, May 1st.
- The code should compile and run.
- It should basically do what you're trying to do.
- It doesn't have to be pretty, or have all the features working yet.
- A 15-minute in-class presentation on Thursday, May 3rd. Show off your code, talk about your method, and so on.
- The
final version of your code is due on the last day of finals week,
Saturday May 12th. This version should be polished and pretty.
Possible Topics (or pick your own!)
Choose any one of these topics, or make up your own topic. Remember
you've got under a month to finish your rough code draft, so keep it
simple! If these
seem too big, feel free to simplify them in your "topic" paper.
- Embrace and extend your project1 topic in some way.
For example, add shadows, or integrate real photos into the method
somehow.
- Do anything interesting with real photographs. For example, combine them into a 360degree immersive environment map, do photometric stereo, do disparity-based stereo parallax measurement, build a head-tracking video system, etc.
- Do something cool on the powerwall. For example, use MPIglut to
tile large images in memory for fast display, or figure out how to hook the powerwall up
to a dozen mice, etc.
- Implement
a walkthrough of a city model of reasonable size. Must include at
least textured ground, several multistory buildings, and some
freestanding foliage.
- Draw a cool scene of your choice. For example, a
volume-rendered smoking volcano, a particle-system fireworks show, an
animating "bullet-time" shot.
- Draw a pretty tree or other foliage or interesting 3D shape.
- Do anything interesting with 3D models. For example, read in
a 3D model from a text file, squish the center of a 3D model by doing a
nonlinear calculation on its coordinates, etc.
- Do anything
interesting with textures. For example, make up a 3D texture for
some real surface, like tree bark. Write a new and nice interface to read
a 2D texture from a file. Blend 2D textures on the CPU or GPU to
create new textures.
- Implement any type of cellular automata (e.g., Conway's Game of Life). These are fun to write on the graphics card using a pixel shader!
- Implement reaction-diffusion textures (of any type), on the graphics card or off.
- Implement
any mesh simplification, subdivision, modification, or smoothing method, including
Garland's Quadric Mesh Simplification, Lindstrom's
Terrain Simplification, Taubin Smoothing, or any of the various
subdivision schemes. You can also find and call a library to do
any of these, but be aware that this is often harder than just
implementing the method yourself!
- Implement any interesting surface shader on the graphics
card. "Interesting" here could mean an anisotropic (e.g., velvet)
shader, a fur shader, a nonphotorealistic (e.g., cartoon) shader, or a
subsurface scattering shader.
- Implement
or fake any form of global illumination: Radiosity, Jensen's Photon
Maps, Precomputed Radiance Transfer, "Radiance"-style raytracing, or make up your own.
- Implement any flavor of raytracing: depth and hit-only raytracing
on the graphics card, real multipath raytracing on the CPU, etc.
- Implement any interesting or reasonably useful non-graphics
application on the
graphics card. For example, implement fluid dynamics, wavelet
compression or decompression, Fourier transform, etc. on the graphics
card.
- Implement display-time Constructive Solid Geometry (CSG) on
the
graphics hardware using backface culling and the Z buffer. You
must use CSG
to build and display at least one interesting (possibly hardcoded)
object containing: at least one intersection or subtraction, and at
least one union. This actually isn't as hard as it sounds as long
as the shape is hardcoded. (Google, Goldfeather's Algorithm Paper).
- Implement any flavor of quality shadows for a moving (possibly
hardcoded) object. We'll be looking at both shadow maps and
shadow volumes, so those would be good choices. Note that painfully fake shadows (e.g., the really easy shadows that are
only cast onto a flat floor) are not acceptable.