Hierarchy
Animate something that exemplifies a hierarchical model. For example, a solar system in which moons orbit planets which orbit the sun, as well as spinning on their own axes. An amusement park ride also typically employs rotations heaped upon rotations in an attempt to make the rider sick. In general, you can pick one of the following four types of thing to animate (or create your own):
- a solar system
- an amusement park ride
- a hanging mobile
- an skeleton or robot moving in a coordinated way
All data regarding your model (radius of orbit, number of cars, length of bar or bone, etc.) should be given as parameters that can be easily changed. Do not hard-code them. In the past, students have read the data in from a file or declared constants within a global header file. Your hierarchical model should be at least three "levels" deep (sun, planet, moon or shoulder, elbow, hand, etc.); however, the data structure for your model must be easily extensible to an arbitrary hierarchical depth (moons orbiting moons, fingers on hands, etc.).
The user of your program should be able to control a variety of options within your simulation using the keyboard. You may choose which keys control which functions, but make sure they are clearly documented in your README.
Allow the user the following controls
- use lighting and materials in your scene (the sun shines on the planets, teacup cars are different metals, etc)
- show/hide the arc of movement (add some geometry to represent the path of the orbits, etc)
- move around within the simulation (move camera in/out or left/right/up/down)
- reset the camera to a canonical place (in case you get lost moving around)
- restart the simulation (go back to its initial values)
For this project, add your code to the JOGL framework discussed in class rather than building your own JOGL program from scratch.
Extra Credit
There are many parts of the project that are open ended. You can earn bonus points with extremely creative or artistic solutions. Make sure that you mention your assumptions, extra features, and how to run your program (especially with regard to program arguments or your data file format) in your README.
To get you started, here are some extra credit ideas:
- use textures on your objects (e.g., planet textures, checkerboards)
- make your model extremely physically accurate (e.g., based on actual physical data or equations)
- allow the user to zoom in on a specific piece of the model (either by clicking on it or via the keyboard)
- animate an object in the scene that does not follow the hierarchical motion (e.g., a spaceship, fly, loose change)
- allow the user to follow any object with the camera as it moves through the scene
Resources
- Chapter 6, 12.2 from Fundamentals of Computer Graphics by P. Shirley, M. Ashikhmin, and S. Marschner
- Scenegraphs: Past, Present, and Future by Avi