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
Features:
- 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 Cubes.zip 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
Features:
- 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: ExporterSample.zip 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++
Features:
- 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: MemoryManager.zip or
View in Browser
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: AISample.zip 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
Features:
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
Features:
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: FauxRigidBodies.zip 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: AIBoids.zip or
View in Browser