You will be given base code to work with, this includes a functioning player and slope with rendered lighting.
The main requirements that need to be added are:
Render a more complex player model
The slope should now have a snow texture applied to it
Randomly populate the slope with billboarded trees, for the player to collide with
Generate a snow particle effect behind the player is they ski down the slope
Allow the player to become airborn as they go up a slope
Calculate how long the player has spent in the air, and how many trees they have collided with
The game should end after 30 seconds, where the player with the most airtime wins, or when a player has collided with 5 trees, in which case that player loses
Add a second player for split-screen multiplayer
Additionally, to achieve an HD, one or more advanced features should be implemented (in order of difficulty/marks):
Depth sorting of billboards
Base code for assignment 2 will be provided after the due date for assignment 1 has expired so that you may use it as a basis for assignment 2 if you choose to. If you do not wish to use the base code provided, all assignment 1 features are still expected to be present in assignment 2.
As with assignment 1, assignment 2 should be done in C/C++, using OpenGL and must compile and run in the Sutherland lab. You may use GLUT to set up the OpenGL context, window and handle input events. A large part of this assignment can be completed in the tutorials, and the tute exercises are directly related to the assignment. However you will still be expected to do some work that is not covered by the exercises.
You may work in pairs or individually.
The slope should now have a snow texture applied to it, in addition to the material it uses for lighting. The texture should be tiled and seamless.
The skier should now be able to become airborn when going up a slope with sufficient speed. Faster speeds should result in more time in the air. Perfect physics is not required for this feature, however gravity should be taken into account, as well as the skier’s velocity vector and forward vector (which may be different), as well as friction and acceleration. While in the air the skier can turn, although its velocity direction should be unchanged (except by gravity), and its orientation should no longer match the normal to the surface.
The Skier model can now be more complex, roughly resembling a skier. It can be rendered as a hierarchical object constructed from multiple shapes.
Billboards and Particles
The slope should now be randomly populated with trees to be implemented as textured billboards (ie, they always face the camera). Basic billboards can use alpha testing or additive blending, however a more complex implementation will use alpha blending while depth sorting the billboards (ie, rendering trees in order of the distance they are from the viewer).
Snow particles should also be generated at the skier’s position, to give the appearance of the skier kicking up snow as it moves down the slope. Snow particles can be rendered as textured quads using additive blending, or as an array of point sprites, or using alpha blending with depth sorting.
The assignment should now contain 2 skiers, rendered in separate viewports side-by-side (splitscreen). The second skier should be controlled using the up/down/right/left arrow keys. The game should keep track of how many trees each skier has collided with, as well as how much time each skier has spent in the air. The game should end after 30 seconds, where the player that has spent the most time in the air wins, or if a player has collided with 5 trees, they will lose. When the game ends it should pause (not exit).
Text should be rendered showing each player’s score (airtime and trees hit) while the game is running, and when it ends, text should be rendered saying which player won.