Project 1 Intro and Topic
CS 481/681 2007 Homework, Dr. Lawlor
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 Thursday, Febrary 15
An executable code draft due Tuesday, February 27 (just three weeks hence!).
- 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.
A 15-minute in-class presentation on Tuesday, March 6th. Show off your code, talk about your method, and so on.
- 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.
The final version of your code is due after spring break on
Tuesday, March 20th. This version should be polished and pretty.
The HTML project topic paper is due on Thursday, Febrary 15. Turn
it in on blackboard.
The project code is due Tuesday, February 27. Also turn it in
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.
a walkthrough of a city model of reasonable size. Must include at
least textured ground, several multistory buildings, and some
- 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 something cool on the powerwall. For example, build a way to
tile large images in memory for fast display, or figure out how to hook the powerwall up
to a dozen mice, etc.
- 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.
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.
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
- Implement display-time Constructive Solid Geometry (CSG) on
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.