I created an RTS simulation in which two factions fought over control of territory. All processing was done asynchronously in parallel prior to the render pass. Utilized a dual-core Intel processor and found maximum performance between 3 and 5 total worker threads. Also implemented a lockless FIFO using a linked-list structure in order to maintain the process list.
Created a first-fit memory manager for game engines. The manager can handle memory space partitioning (within sub-managers) and assists in debugging code. Provides help with double deletes, lifetime memory leaks, temporal memory leaks, tracking memory footprints and heap corruption.
A landscape displayed from a heightmap and single diffuse texture. Landscapes were from 4-8 million vertices. Regions consisted of 4096 vertices and could be drawn as anywhere from 2 tris to 8 thousand tris. Distance to camera and intrinsic detail bias based determination of which level-of-detail to use. A normal map was also calculated at first load to show consistent lighting despite changing LOD.
This math project is similar to a game of paddle-ball except that there are five balls on the string, and the balls are teapots! Teapots were strung together using spring dynamics and allowed to rotate in three dimensions. The teapots act as spherical rigid bodies. The project computes a first-order physics simulation relying on moments of inertia causing both translation and rotation.
I wrote custom shaders in both DirectX’s HLSL and OpenGL assembly to obtain a three dimensional effect on flat surfaces. My engine utilized three textures (diffuse, normal- and height-map) in order to light the model. I used N•L and specular lighting along with parallax texturing. The models were rendered based on a point light source either from the camera or a point in space. The point light is represented by a blue ball.
I integrated BSP into my 3d engine including the ability to load Quake 3 map files. Entire Quake 3 maps could be rendered complete with built-in textures and light maps. Frustum and occlusion culling were performed on the BSP to greatly reduce the poly-count per frame. My engine also supported ray casting on a per-face then per-poly basis while using the BSP to perform in-order search based on distance.