[x] Texture mapping. Implement texture mapping for at least one of the 3D objects in your video game. This will require you to load the texture images, figure out some way of computing or specifying texture coordinates, and enabling texturing.
[x] Multiple views. Implement a second view of the game world, in addition to the “main” view. For example, if the main view is first-person, implement a global overview or an over-the-shoulder view, to be displayed on the screen at the same time as the same view.
[x] On-screen control panel. Many 3D video games reserve part of the display area for an on-screen control panel, which may include text or 2D graphical elements for user controls, scoreboards, etc. Flight simulator games often use 2D graphical overlays on the 3D world for “Heads Up Displays (HUDs).”
[x] View frustum culling. In video games with complex 3D environments, it is necessary to limit the number of 3D primitives drawn each frame in order to maintain interactive rendering rates. One way to do this is to avoid drawing any 3D objects which are outside of the viewing frustum of the camera. You can pre-compute rough bounding volumes for hierarchical objects or parts of your 3D world, and then test each bounding volume to verify that some part of it intersects the view frustum before drawing its contained objects each frame.
[x] Level of detail control. Another way to limit the number of 3D primitives drawn each frame is to implement level of detail (LOD) control in your game. One simple method of LOD control involves creating multiple versions of some of your 3D objects, varying in geometric complexity (such as 100, 1000, and 10000 polygons). Then, before drawing the objects each frame, you can pick the most appropriate version of the object to render, depending on such metrics as the distance of the object from the viewer, the complexity of the current scene, or a user-selectable detail level.
[ ] Occlusion culling. Yet another way to maintain good game performance with complex environments is by performing occlusion culling. Similar to view frustum culling, this technique involves using a conservative computation to avoid drawing any parts of the 3D scene which won’t be seen by the viewer because they are hidden behind other objects. For static environments such as buildings, you might pre-compute which regions of space (such as rooms) are impossible to see from other regions (due to occluding walls, for example).
[x] Procedural and physically-based modeling. In addition to using scanned or hand-modeled objects to populate the 3D worlds, some video games use procedurally computed models, such as fractally-generated mountainous terrains, L-grammars for generating models of plants, or particle systems for fire, smoke, and clouds.
[x] Collision detection. Video games often contain moving objects which trigger events when they collide, such as projectiles shot at a target. Collision detection can also be used to prevent the user from passing through walls or other objects. You can implement collision detection in a variety of ways; the simplest might involve comparing bounding volumes of objects to decide if they intersect or not.
[ ] Simulated dynamics. Your video game implementation might include modeling dynamic behaviors and physics for objects in the 3D world. For example, the wheels of a vehicle might react realistically as they move over rough terrain, or a door might swing open differently depending on the force exerted by the player.
[ ] Vertex or fragment shaders. Use GLSL to implement custom shaders to be evaluated at vertices or fragments (pixels). These might implement procedural shading or geometry effects, or be used to implement more advanced rendering techniques.
[ ] Advanced image-based techniques. In an effort to increase graphical realism and maintain fast performance, many video games mix traditional 3D graphics rendering with 2D image-based graphics. Although 2D texture mapping is an example of a basic image-based technique, more advanced techniques such as environment mapping, billboarding, and projective textures are possible. Other ideas for image-based techniques include precomputing multiple 2D images (“sprites”) of a object from different orientations, and then choosing the most appropriate sprite to warp and render in the 3D scene.
[x] Sound. Adding appropriate audio effects to your game can provide a more compelling experience for the player.