Name: Marc Colussi
Student Number: s3016887
Email: s3016887@student.rmit.edu.au
Type 'make' to compile the program. To Run, type ./meatyTeapot from terminal.
Camera movement and control:
To Animate Character:
The animation can be saved from the right click menu and will be saved as the file 'animation.dat' in the data directory
+rotate x: 'Q' -rotate x: 'A'
+rotate y: 'W' -rotate y: 'S'
+rotate z: 'E' -rotate z: 'D'
+translate x: 'num7' -translate x: 'num4'
+translate y: 'num8' -translate y: 'num5'
+translate z: 'num9' -translate z: 'num6'
increase trampoline bounce: '='
decrease trampoline bounce '-'
Increase animation speed: 'V'
Decrease animation speed: 'C'
There are also some pre-made animations that can be loaded and played from the right click menu
The teapotMan program is set within a simple gymnasium setting containing a central trampoline setting made of a 'squashable' ball and a platform. There are two side stands similar to those found within an indoor basketball court/gym. The central trampoline is able to be animated and the degree of 'squash' is calculated within the program code.
My program contains three different rendering settings as well as the ability to enable or disable GL lighting:
only draws the vertices or 'wires' of the objects. If lighting is enabled, these vertices still get lighting effects and render.
only caluclates the oject rendering on a sequence of flat surfaces and thus lookes somewhat 'grainy' when compared to smooth shading.
'smoothens' the object rendering to create a nice, even rendered scene. Uses blending algorithms within the OpenGL library to create the look.
The main character is drawn through a function which obtains the scale and translation values from another function within the program. This means that once a particular component attribute is altered, the character is changed on the screen as soon as the redraw function is called. Which in my case, is whenever an attribute alteration is made. The initial character values are built into the code but the animated values are stored in a file when the save option is selected.
Animations are controlled through a defined linked list abstract data storage. Each 'keyframe' struct contains of a time value as well as the sequence of character values that determines the characters position at that time. When the animate function is called, all intermediate values are calculated using the interpolation function and subsequently drawn on the screen to produce a completed animation. These animations can be saved to a file (initially 'animation.dat) which stores all information contained within the linked list. When the animation is then loaded, the link list is reconstructed with correct memory allocations and ready to be animated.
The animation speed can also be increased or decreased by altering the 'MILLI' diviser value within the program
ADD BRIEF ANIMATION HERE
For this assignment, I decided to have a separate header file consisting of the different structs used throughout the program and a main 'driver' file containing all the function implementations. Through the use of global variables my program is able to alter the character positions from anywhere in the program to make an implementation of animation easier.
Initially, I created the teapot man himself before implementation of the animation and editing functionality. After the character's joints, scale and movement were finalized, I began designing the keys and commands for the editor's movement. Once the editor was complete, the scenery was built from function calls within the display() function and then the animation functionality was implemented. using interpolation and keyframes. Finally, the lighting and rendering was completed as well as the rest of the rendering and text options.
I was considering using another separate file containing all the initial character values that could be loaded in to make things a bit more cohesive however time constraints suggested otherwise.
NOTE: It seems that changing the animation speed can have some bad results on the fps meter. most probably due to the MILLI diviser changing the fps calucaltions.