To Run: To run the application, the viewer.py or render.py scripts from cgkit (http://cgkit.sf.net) must be used. Configuration is done using environment variables. There is one configuration parameter: BILLIARDS_INFILE: The input filename. Defaults to 'infile'. Two sample input files are provided. infile: Six balls on the table. The red ball gets hit. infile2: Six balls on the table. The pink ball gets hit. A sample execution is: $ BILLIARDS_INFILE=infile viewer.py billiards.py $ BILLIARDS_INFILE=infile2 render.py -e 60 billiards.py Using viewer.py will display an opengl window and display the animation realtime. Using render.py will generate a number of .tif files that have been rendered using the configured renderer. The renderer can be selected using the -r command line argument (I've used 3delight, aqsis, and prman). The -e argument defines the last frame to render. Without this, only the first frame will be rendered. If using the viewer.py script, you can press the space bar to trigger another hit on the cue ball. The 'r' button will reset the table to its initial state. To Build: There is no build step for the code I've written. Installing the cgkit library (http://cgkit.sf.net) that I used to interface with renderman is a bit of a pain though. I'm using a CVS version of cgkit, which can be downloaded from the website. The Boost libraries must be installed for cgkit, but only the Boost.python module. I have this working on my office and laptop macs, so if needed, I can show you the operation on either one of those or assist in installation on your machine.