Features:
1. Character animation
- All vertices of meshes are bounded to bones. And the bones have hierarchical structure.
So if a bone translates or rotates, all bounded vertices and children bones of it move
correspond to the bone. This technique makes character animation designs easier and more
flexible.
2. Collision detection
- Efficient and fast collision detection is done by using dynamic quad-tree to store
numerous objects, which take O(log n) to search objects to compare. The tree structure
is updated only when object is moved away from the area represented by current node.
It is also possible to get objects that are inside a certain radius from input point.
Various collision detection methods are applied, from coarse detection to more complicate
ones. Finding intersection between line segment and AABB, AABB and AABB, line segment and
OBB, OBB and OBB and so on are implemented, which can eventually pin point the collision
points. This technique enables collision check between objects and objects, and objects
and curved trajectory.
3. View frustum culling
- Dynamic quad-tree is also used to do fast view frustum culling. Only objects in a certain
area are pulled out from the tree and checked with six planes.
4. Particle system
- Very flexible particle system is implemented to generate smoke, flame and other special
effects. Friction and Brownian motion are added in Newtonian physics. For fast rendering,
sequence of result images are captured to build animated texture with billboarding. Two
blending modes are used to give different effects.
5. Shadow Volume
- Z-fail volume shadow (as known as Carmack¡¯s reverse) was used to render shadow. First of all,
we made multi-pass rendering pipeline except for 2d objects: heads up display and particles.
The next step is finding silhouette edges from the lighting source. After then, shadow volumes
having sides and caps are built by the edges. Finally, we rendered the game scenes twice with
stencil operation; first rendering for shadow area, and second rendering for lightning area.
6. Heads up display
- Heads up display shows 2D radar map with texture and game infos. In flight simulation
mode, various information such as altitude, height, roll, pitch angle and velocity are
displayed in an intuitive way. Also, health bar is displayed for enemy that is inside front
half circle from main character.
7. Event driven game engine
- Every entity has statuses and message queues. Statuses have several categories such as
a ¡®fire state¡¯ indicating which the entity is firing or not. All events in game are notified
through messages. In every update time, the entities check their messages box and take
appropriate action determined by a finite state machine.
8. Maya 3D Modeling
- We use Autodesk's Maya 2009 to model 3D objects (triangulated meshes) and export them to .obj files. We implement a simple .obj file reader to load the meshes into our 3D world. The file reader read an indexed triangle mesh from .obj file and store adjacency information of the mesh into Half-Edge data structure. By taking advantage of the data structure, any adjacency relation query such as vertex split or edge collapse can be operated in constant time per primitive.
9. A* Path Finding
- As a part of artificial intelligence in the game, we use A* path finding technique. Our A* is based on 2D tile map and uses Manhattan distance for heuristic. We can think of the terrain as 2D tile map, when projected onto x-z plane. (i.e. y-coord represents height) Thus, A* is easily incorporated into the terrain.
10. Bump Mapping and Fog using Cg Shading Language
- To achieve realistic rendering effect of the terrain, we implement Bump mapping and Fog using Cg shading language.
11. Terrain Rendering with View Dependent Refinement and Geomorphing
- We refer to a paper, ¡°Terrain Simplification Simplified: A General Framework for View-Dependent Out-of-Core Visualization¡±, written by Peter Lindstrom and Valerio Pascucci. In sum, error metric is recursively defined for each vertex from parent to children. The error metric depends on the distance from previous refinement level and from the eye position. For example, if the eye position is close to the vertex, the region around the vertex should be refined further until the error metric is within error tolerance. In addition, if the error metric falls within a range of certain thresholds, geomorphing is used to alleviate popping phenomena. Furthermore, view frustum is also automatically done by checking whether the bounding sphere, which is defined for each vertex's error metric, is within the view frustum.
Go Back
|
Download:
Compilation:
- Windows, Visual Studio 2008 or above
- GLUT, DirectX SDK, CG are required.
Running Environment:
- Windows environment with DirectX and hardware pixel shader support.
Installation:
- Move all the .dll files to Windows' system32 directory and run the program.
Key Instruction (provided along with gameplay):
- move: w,a,s,d (q,e: side walking for robot)
- transformation: z,x
- booster: space bar
- fire: mouse
Download (Executable on Windows Vista)
Go Back
|