Description: This program renders a robot which the user can manipulate with various key strokes. I was aiming to build a more detail robot. I wanted each hand to be different, with the right hand having three long fingers equal distance from each other mounted on a half-sphere and the left hand would have a buzz-saw-type weapon. Implementing these seemed to difficult and time consuming. The problem with the buzz-saw was that I wanted to have little cones as the teeth and then make it rotate. It seemed too hard at the time, but I think I could have implemented it given more time. I also wanted to have two arms coming out of the robot's back which would have had weapons, like a laser gun and a missile launcher. During modelling I felt that this also was too difficult and time consuming. There were also many ideas I had for different animations. Due to time constraints I had to limit myself. I think I made a pretty good project, but it could have been better had I started earlier. The final design of the robot was a bit different than I had imagined. Translating from paper to 3D objects is tougher than it seems. The three main aims I had for this project were to render a robot, light it and then have some animations. I completed my three aims to some degree, meaning that I accomplished them but not exactly to my high expectations. How to Run: To run the program unzip the executbale if necessary and double-click to execute. The arrow keys control the view of the robot. Pressing "w" toggles between wireframes and solid objects. Pressing "1" toggles the light on or off. If the light is off, the robot can still be seen due to ambient lighting. Pressing "R" increases the rate of movement of the view when using the arrow keys. Pressing "r" decreases the rate of movement of the view when using the arrow keys. Pressing "F" or "f" toggles the Freak Out mode, where the robot's head rotates counter-clockwise, the right arm rotates one way and the left arm rotates the other. Pressing "N" or "n" toggles the No No mode, where the robot shakes its head back and forth while it holds up its right arm and hand indicating stop. Pressing "H" or "h" toggles the Helicopter mode, where the robots torso and arms rotate counter-clockwise. Pressing "J" or "j" toggles the Jog mode, where the robot wings its arms and legs as though it were jogging. Pressing the escape key quits the program. Techniques/Things I learned: Most of my robot model was made using quads. This was very time consuming due to having to figure out where each quad should go in relation to each other. I broke the robot down into 6 main parts, those being: head, chest, right arm, left arm, right leg, and left leg. Each part was rendered in its own function which was called in drawScene(). I made two cubes using two triangle fans each but in the end the time spent was wasted due to lighting and shading working in a different way than I thought they would. I had a different flag for each mode that my robot could enter. Each flag was linked to a keystroke or two and this would trigger a toggle function. This toggle function would toggle the flag and reset all other flags and variables. This was to prevent multiple flags from being on at the same time, which cuased some unwanted behavior. When rotating for some animations there where times when I had to "unrotate" something in order for it to stay still. I did this a couple times with my "HeliMode" in which part of the torso and the two arms were to rotate around. I had to stop the legs and bottom portion of the torso from rotating to get my desired effect. This was done by simplying inserting a glRotatef() function call passing in the negative of the rotated angle. This left the object unrotated. Drawing normals for all of the quads took a long time. I basically copied and pasted each glVertex3f() call and changed "Vertex" to "Normal". Also the normals looked weird on the quads. They weren't nice looking like the cylinders and spheres which required no specifying of normals by me.