By Jon Amireh
My final graphics project is a coin collection and world exploration game. The scene is set near a shallow ocean floor and you play third-person as a submarine collecting coins randomly placed a certain distance away from you.
Spotlight - One of the main light sources is the spotlight that shines from the front of the submarine onto every object rendered
Animation - Both the camera's view and the submarine's model are animated on the same curve; that is, when the submarine turns so does the view and when the submarine levels out, so does the view using the exact same sin function
Particle Effects - There are around 15,000 particles in the world to mimic the dust and dirt particles that would be found in a scene like this
Collision Detection - When the submarine hits a coin, it uses smallest enclosing ball to calculate the bounding sphere and then a distance computation is performed to determine if the coin has been collided with the submarine.
Collision Reaction - When the submarine hits any of the 6 sides of the world, the velocity vector is projected perpendicuar to the side's normal which allows the submarine to glide across the side without passing through.
Texturing - The submarine and the sea floor have been textured with a single texture for a somewhat more realistic game.
W - Tilt down
A - Turn left
S - Tilt up
D - Turn right
SPACE - Pause throttle completely
O - Decrease throttle
P - Increase throttle
Collect all the coins (progress and initial amount can be found in terminal output) and then the program will quit itself.
The default coin count is 5; this can be customized with the first argument for the start of the program.
Controls can be a bit wonky; they can get stuck but the simple fix is if you get stuck, quickly press and release the directional key for the direction you're stuck and it should level out.



