15-462 Programming Assignment 3: Fun with Particle Systems

DEADLINE: Due Friday October 31, 2003 midnight (spooky!)

Instructor:Doug James

An Overview

Particle systems are an important and versatile tool for procedural animation. They can be used to model a wide variety of phenomena, including explosions, fireworks, water, smoke, lava, cloth, rigid and deformable objects, fracture, grass, hair, and many other things. This assignment asks you to build a particle system, and use it all to create a "cool" animation. You are also required to use texture mapping in some way. To provide a place for your particles to crash on the ground (such as in Karl Sims waterfall above), you can use your height field (from asst #1), or you may choose to contain your particles inside (or on) an object, or let them move freely in space.


This assignment is intended as a hands-on introduction to integrating the equations of motion, i.e., f=ma, for the simplest case of point-mass particles. It's also intended to give you a lot of room to make something really cool!  The starter code can be from your first assignment, since you only need basic functionality (to write (and perhaps read) a JPEG image) and handle mouse and keyboard input. You must write the code to manage features of the particle system you decide to use (e.g., create, delete particles, compute forces, collisions, Euler integration), perform any and all rendering (including some required texture mapping), and handle any other functionality you may desire. We highly recommend the use of GLUT--please see the OpenGL Programming Guide for information, or, if you chose not to purchase this book, please see OpenGL.org and a page of OpenGL tutors or the on-line red book . You may use an alternate library (FLTK, GTK, etc) if you desire, but your submission must run in the graphics cluster, and we will likely be unable to provide support if you run into problems.

Background Information

Particle systems are very very widely used in computer animation and games to create a variety of effects. Some references (and info on the authors) are:

Your Implementation

For starter code, you may use any code from your prior assignments, including you height field implementation. Try to use the particle system programming abstraction described in Andy Witkin's "Physically Based Modeling" course notes.

Grading Criteria

Your program must:

Animation Requirement

After finishing your program, you are required to submit an animation, represented by a series of JPEG images which are screenshots from your program. Functionality to output a screenshot is included in the starter code, and assumes you are using a window size of 640x480--your JPEG images must be this size. Please name your JPEG frames 00.jpg, 01.jpg, and so on, where 00.jpg is the first frame of your animation, and please do not exceed 100 frames. Expect a framerate of 15 frames per second. It's probably a good idea to test your animation by using animate ("man animate" for information) in the graphics cluster. This program takes a sequence of images and displays them as an animation, at your desired framerate.

The method of generating your frames is left up to you--there is a large amount of room for creativity. You may use any software you wish to generate the source images for your height fields or particles. The GIMP is available on graphics cluster machines (type "gimp" at a terminal prompt). You may also use your animation to show off any extra features you choose to implement.


Please submit your code along with your makefile to /afs/andrew/scs/cs/15-462/students/your_andrew_id/, in a sub-directory called asst5. Running "make" in this directory should compile your program successfully--if not, you've left out a necessary file. Within this directory, make a sub-directory called movie, and place the frames for your animation within, numbered as described above.



You may choose to implement any combination of the following for extra credit.

For the brave or insane: