Project 4: 3D Animation
This project extends the ideas of the previous assignment to explore 3D animation. To do this, you will create a 3D animation within Processing that will loop indefinitely. This animation is expected to be complex enough to require multiple objects (and therefore multiple classes) and have several levels of scene or object transformations in order to create a range of interesting, cohesive movements.
Basic Requirements #
You will write the following:
- A 3D scene that is drawn via Processing.
- Multiple objects that are continuously animated in this scene. These animations do not need to loop seamlessly. For example, an animated object might jump from the last position back to the first position, but this is acceptable as long as the animation continues.
- A project report to detail overall design and animation goals.
Your animation must have at least two classes for animating objects in the scene, and at least two levels of hierarchical grouping to form at least two levels of distinct animation using any of the following transformations: translate, rotate, scale.
You must also have at least two instances (objects) of class you create that differ in some way. For example, they may have different colors, or be transformed in different ways.
Finally, your animation must have some sort of narrative. This does not mean you need a story in the classical sense–for example, if you are animating a protein docking sequence, the docking is the narrative. However, your animation does need to attempt to convey something, rather than being a bunch of pretty shapes doing a pretty dance on the screen.
You may import 3D assets, like OBJ files, to use in your animation.
Project Report #
Create a project report as specified in the Project Report rules
Make sure your report includes the following information:
- The narrative of your animation.
- What the included classes do
- How you met the two-transformation requirement
- Your two classes and what members they have
- How you met the two-instance requirement (e.g. how you have at least two objects that differ in some way)
- Any unexpected challenges you faced along the way
Language Model Log #
You should either submit a log of your language model interactions, or a statement that you did not use LMs for this project. In either case, you will need to submit a file in your project on your LLM usage. See the rules on language model logs for details.
Extra Credit #
Implement a way to control the camera in your 3D scene. There are two flavors of camera controls: FPS camera controls are found in most first-person games, while orbital camera controls are found in many 3D modeling programs. The camera controls in this section will be click-to-activate. That is, you should not move the camera until the user clicks and drags with the mouse. You should then move the camera according to the click type and movement as explained below.
If you choose to implement both types of camera controls, provide a way to switch between them and document it in your project report.
Orbital Camera Control (up to 5 pts) #
In an orbital camera system, there is some point in the world which the camera is focused on, and camera controls rotate the camera around this point. Imagine walking around a statue while observing it, or download a 3D visualization program like MeshLab to get a feel for how this type of camera works.
You should implement the following controls:
- Left click and drag the mouse to orbit around the central point, like the camera is on the surface of a sphere and always pointed at the central point.
- Right click and drag the mouse vertically to zoom the camera in and out.
- Create some way to move your central point around the scene. For example, some programs with orbital controls allow you to move the camera, along with the focus point, by middle-clicking and dragging.
Document your controls in the project report.
First-Person Camera Control (5 pts) #
In a first-person camera system, we imagine that the camera is strapped to someone’s head, and dragging the mouse rotates their head in that direction.
Implement a first-person camera system where left-clicking and dragging
rotates the camera in the appropriate direction, based on how far the mouse is
dragged. Floating-point error in the camera rotation can cause the camera to
precess—that is, if the mouse is dragged in multiple circles, the camera can
“tilt” so that its up
direction is different. Make sure your camera
controls do not suffer from this issue. The simplest way to solve this is to
simply pin the camera’s up
direction.
Document your controls in the project report.
Submission #
Your submission should include the following:
- A Processing file named
youreid_project4.pde
that runs the animation. - All the necessary classes and subclasses for the Processing file to run.
- Any assets (e.g. OBJ files, textures, etc) that your animation needs to run.
- Your project report, with the information specified above and the project report guidelines.
- Your language model log
Place this all into a directory named youreid_project4
, zip the directory,
and submit it to Canvas.