Game Engine

Wrote a game engine from scratch with multiple subsystems using OpenGL and C++

Systems Included:

Object System
-Wrote a tree data structure that deals with a hierarchy of objects that are dynamically created in memory
-This hierarchy can be used in the creation of a scene graph for graphics objects or in dealing with animations that deal with having bone joints

Math Library
-Wrote a fast math library that can deal with vector, matrix, and quaternion calculations
-Implemented templates on some math functions to prevent the occurrence of implicit conversion

File System
-Wrote a file system that deals with writing and reading files by accessing the built-in system calls of the operating system for increased performance
-Wrote a file archiving system that can combine multiple files into a single file that can be read into memory

Memory System
-Wrote a memory system for the engine that deals with faster memory allocations using the built-in system calls for heap allocation
-Overloaded the new and delete operators so that a type of heap could be picked and what alignment it should be
-Wrote a memory manager that keeps track of allocations based on file and line number for debugging purposes

Graphics System
-Used OpenGL for the graphics pipeline using vertex buffers and vertex array objects for sending data to the GPU
-Used GLSL for the shading of graphical objectsoWrote a series of managers that deal with textures, multiple cameras, and also different types of shaders

I have various demo videos that showcase the capabilities of my game engine

Rendering Demo
In this demo, I demonstrate that I can render simple primitives such as a cube, pyramid, sphere, and a cylinder. The objects can have textures that can be hot swapped. Also, objects can have lights where diffuse lighting can occur. And objects can be rendered in wireframe.

Complex Model Rendering Demo
In this demo, I demonstrate converting various complex models from Autodesk’s Filmbox (FBX) format into a runtime file format for my game engine

Bounding Volume Demo
Here, I show a bounding volume demonstration with a camera frustum. The purpose of this is to show that if an object is outside of the camera frustum’s view, then we can tell the system to not draw which can give us a great boost in performance.

Animation Demo
Here in this demo I extract animation data from Autodesk’s FBX format again such as the skeleton and keyframe animation data and convert it to a runtime file format for my engine.