Individual Work

Procedural Terrain Generator

About: This program procedurally generates a varied and visually interesting terrain in real time. The terrain is generated as a dense voxel grid, which is then converted into a polygon mesh using the Marching Cubes algorithm.

Multiple terrain types are supported, with blending between areas. The mesh is then procedurally textured and rendered to screen. The terrain noise generation results are controllable through an .ini file.

Tech: C++, DirectX, HLSL


  • 3D voxel grid stores terrain noise values
  • Mesh generation using the Marching Cubes algorithm
  • Triplanar projection for procedural texture mapping
  • Blended terrain types and textures
  • Multi-threaded for fast generation of terrain

Code Sample: Marching or View in Browser

3ds Max Animation Exporter

About: This exporter is a .dll plugin for 3ds Max which allows the user to export animated (or non-animated) scenes as a custom filetype, which can then be loaded into my Combustion Engine for rendering. The plugin supports both basic transform (translation, rotation, and scale) animations, as well as skinned meshes with animation.

Tech: C++, OpenGL, DirectX, 3ds Max


  • 3ds Max plugin
  • Exports to custom file type (.gas)
  • Exports model, material, and keyframe data
  • Supports translation, rotation, and scaling
  • Supports skinned meshes

Code Sample: or View in Browser

Memory Manager

About: The Memory Manager overrides the new and delete functions in C++. It allows the programmer to divide memory into heaps, which can then be managed by the Memory Manager. Heaps keep track of their usage statistics (number of allocations/deallocations, largest/smallest block allocated, etc). The Memory Manager also reports any errors, such as memory leaks, out of memory, etc.

Tech: C++


  • Wrote custom memory manager to override new and delete
  • Tracks usage statistics to help optimize and debug code
  • Reports issues like dangling pointers and off-by-one errors
  • Allows partitioning memory into seperately managed heaps

Code Sample: or View in Browser

CombustScript Compiler

About: CombustScript is a typeless scripting language written for my Combustion Engine. The syntax resembles C/C++. I wrote a compiler to tokenize, parse, generate bytecode, and run the scripting code.

A sample script is shown on the left.

Tech: C++


API Agnostic Dual Renderer

About: This engine acts as a wrapper interface for both OpenGL 3.1 and DirectX 11. Using my API, programmers can support both OpenGL and DirectX using the same code, and toggle between the two.

It was originally designed as a 3D engine, but I am slowly adding 2D features in my spare time.

Tech: C++, OpenGL GLSL, DirectX HLSL

3D Features:

2D Features:

  • Tile Map Loading and Rendering
  • Texture Atlas Support
  • Animated Sprites
  • Text and Text Box System

A* Pathfinding and GOAP

About: In this program, four AI characters attempt to feed themselves while competing against the other characters for resources. The characters use Goal Oriented Action Planning (GOAP) to make a plan and A* to navigate the world.

For pathfinding, some areas are easier to walk on than others. Grass is the easiest to walk on, followed by thick grass, then water. Stone walls cannot be walked through.

The final goal of all characters is to get bread and eat it at the table. If a character finds that their plan will not work, they replan. The possible actions are as follows:

  • Pay 20 gold to buy bread
  • Pay 10 gold to buy flour
  • Bake flour in oven to get bread
  • Open chest to get 20 gold
  • Use key to get treasure to sell for 10 gold
  • Use axe to mine gems to sell for 10 gold
  • Kill wolf to get pelt to sell for 10 gold

Tech: C++, OpenGL

Code Sample: or View in Browser

Real Time Lighting

About: In this program, a flat cube is rendered with parallax mapping, specular highlights, and tangent-space normal map lighting. There are two lights in the scene, one orbiting the cube and one attached to the camera.

Tech: C++, OpenGL GLSL, DirectX HLSL


Quake BSP Loader

About: This project loads and displays Quake3 BSP maps. To speed up rendering, backface, Frustum, and PVS culling are employed. The program supports both diffuse and lightmap textures.

The user can release the frustum and their position in the scene to verify that both kinds of culling are working.

Tech: C++, OpenGL GLSL, DirectX HLSL


Spring Based Rope

About: This project was done for my Math and Physics III class at the Guildhall. The goal was to simulate two particles constrained by a spring, to create yoyo-like behavior.

I added more particles and constraints to the simulation to create a spring based rope. The program can be switched between Forward Euler, Verlet Integration, and RK4. Blue is Forward Euler, Green is Verlet, and Pink is RK4.

Tech: C++, OpenGL

Faux Rigid Bodies

About: This program approximates a Rigid Body effect in 2D using OpenGL.

The corners of each shape are particles, which are moved based on gravity using Verlet Integration. The program then checks for collision between each particle and all shapes in the scene and resolves accordingly.

Each particle has distance constraints with the two particles it shares an edge with. The program iterates over the particles, and attempts to resolve the constraints without collisions. The more times the program iterates, the better the result looks. This creates the appearance of Rigid Bodies.

Tech: C++, OpenGL

Code Sample: or View in Browser

AI Boids

About: This program simulates simple AI Boids flocking, wandering, and chasing behaviors.

There are two types of Boids in the scene, prey Boids and attack Boids. Prey boids obey the following rules: separation, alignment, cohesion, avoid collisions with the ground, and stay within the mountain boundaries.

Attack boids wander around the scene until they become hungry. When an attack Boid is hungry, it chases and intercepts the nearest prey Boid. When an attack Boid collides with a prey Boid, the prey Boid is eaten and the attack Boid becomes full.

Tech: C#, Unity3D, Autodesk Maya

Code Sample: or View in Browser