Rain: Rain is represented using triangle strips and transformed
Bounding Objects: Objects are bound in either a box or a sphere, depending on which has less volume in order to minimize wasted space. This could be eliminated if hierarchical bounding objects were used.
Collisions: Collisions are detected between all implemented bounding objects (sphere-sphere, sphere-box, box-sphere, and box-box)
What doesn't work
Running on openGL drivers other than MESA: Due to bugs in the implemented code and issues with GLSL shaders, Nvidia's openGL implementation crashes when attempting to run the program. Sorry!
[Code exists, implementation doesn't work] Texture Mapping: All objects displayed were supposed to implement textures in order to further the realism of the environment.
[Code exists, implementation doesn't work] Sky Box: This is a specific texture map that required cube mapping in order to simulate a full environment.
Water hydrodynamics: When water hits an object, it reacts in multiple ways: merging with other water objects, splitting apart and moving in different directions, bouncing off the object, attaching to the object, or sliding off the object. Unfortunately none of these were able to be implemented in the time I had available.