Curve and Spline Viewer
- Development Tools: C++, wxWidgets
This project allows the user to place and move input points, which can be used to draw a curve or spline using one of six methods. This project is used to help visualize the results of various curves and the effects the placement of the input points has.
For this project I implemented Bezier curves using de Casteljau's algorithm for nested linear interpolation, calculating the curve using Bernstein polynomials, and approximating it using midpoint subdivision. I also implemented parametric polynomial curves, cubic splines, and B-splines using De Boor's algorithm.
FBX Content Exporter
- Development Tools: C++, Autodesk FBX SDK
I developed a content exporter that converts Autodesk FBX files into a custom binary format, which can then be quickly loaded at runtime into our game engine. This enables us to develop our art assets using Autodesk's 3ds Max or Maya, and import the assets into our game.
The exporter supports rigid and skinned meshes, skeletons, and animation tracks using quaternion orientations. It supports textured meshes and can generate and export tangent-space vectors for normal mapping. Additionally, it can export adjacency lists for the mesh as well as bounding volume information to reduce run-time processing.
This project remains in development as a tool used with my junior game, Gloaming Hour, and is being adjusted to suit the needs of the project.
Shadow Mapping
- Development Tools: C++, OpenGL, GLSL
This project implemented shadow mapping and percentage closer filtering (PCF) for my Advanced Computer Graphics class. Using procedurally generated shapes to cast shadows, sixteen samples are taken for the soft shadows, and depths are packed into a RGBA buffer.
Environment Mapping
- Development Tools: C++, OpenGL, GLSL
This project implemented reflection and refraction mapping using cube maps. The scene contains an object in the center that reflects or refracts the skybox and other objects in the scene. Texture lookup in the cube map was done manually using the reflection or refraction vector.
A* Pathfinding
- Language: C++
I implemented A* pathfinding during my Artificial Intelligence for Games class using the provided graphics framework. A* was implemented using a weighted heuristic, which allows adjusting the search to act more like Djikstra or best-first. To improve the final path, I used rubberbanding as well as smoothing using Catmull-Rom splines.
Quaternion Interpolation
- Development Tools: C++, Direct3D 9, wxWidgets
This project shows various rotations being applied to a 3D model to showcase the benefits of quaternionic interpolation methods. I implemented the following interpolation methods:
- LinMatrix: Linear interpolation of two rotation matrices
- LinEuler: Linear interpolation of two sets of Euler angles
- Lerp: Linear interpolation of two quaternions
- NLerp: Same as Lerp, but the resulting quaternion is then normalized
- Slerp: Spherical Linear Interpolation
- Squad: Spherical Quadrangle Interpolation