Develop a simple 3D shooting program using OpenGL. The program should
meet the following requirements:
– This program builds creates 15 teapots arranged in 3 rows (5 per row).
– Create and add a 3D cannon such that it aims forward from the viewer towards the far plane. It is okay to show only the tip (firing end) of the cannon.
– The cannon can turn left and right, and up and down (yaw and pitch movements) like a real cannon. The user controls left-right rotation with right-left arrow keys, and up-down rotation with up-down arrow keys. The rotation in either direction should be clamped to a certain range (say, 120 degrees) so the cannonball would stay within the view volume.
– The cannon should fire a cannonball (sphere) every time the user presses the space bar. The ball should fly in the direction of the current orientation of the cannon. Once the ball goes through any wall and thus no longer visible, delete it from the scene to avoid clogging the memory. Therefore, the system will store no more than a few (fired) balls at any given time.
– During the game, display text at the top of the screen that shows how many teapots are currently left
– When the cannonball hits one of the teapots (collision detection needed here), the hit teapot must immediately disappear from the scene (and so must this cannonball). The text must also be updated accordingly with a new number (one less teapots left). (see further below on how hit teapot should exit the scene)
– When the last teapot is hit, the game is over and the text should be replaced with “Continue? (Y/N)”. If the user presses ‘y’, start the game over. If ‘n’, exit program.
– The background walls (all 5 of them) must be texture mapped, although Fig. 1 doesn’t show it. You can use any tileable texture image of your choice, but make sure the image file size is less then 1MB (with no bigger than 512 512 pixel resolution). Do not use multiple texture images.
– If the user presses ‘q’ at any time (even during the game), exit program.
– If the animation is too fast on your computer, slow it down to a level where each teapot’s movement and the cannonball’s movement are clearly recognizable.
– Make sure there is no sudden jump or discontinuity in the animation. The whole sequence of transformations must be smooth and continuous.
– Every time the cannonball fires, rapidly push the cannon backwards a bit to simulate the action-reaction effect. After this quick push back, the cannon should immediately come back to its original position before it can fire a new ball (see [url removed, login to view]). Try to make this movement
as realistic as possible.
– Whenever a teapot is hit, the hit teapot must fly out of the scene in a random direction towards far plane (so the depth should increase) while randomly spinning. Once the teapot goes past the wall, remove it from the scene.