Personal DirectX 12 Engine


Platform

Version Control

Language

Development Time

Windows

GitHub

C++

3 Years and ongoing

Project Overview

This engine is a solo project created with the intent of learning how to utilize the DirectX 12 Graphics API in order to create a game. The project is actively in continuing development with more tools and features being added as time goes on.

Engine Structure

The EngineCore class's task is to initialize and update systems which take care of specific tasks. Those tasks are rendering, keeping track of the program's game time and update the game object's states depending on their components behavior.

Entity Component System

The engine utlizes ECS which splits up data from functionality to gain better performance while also maintaining a structure which is easy to change. Variable values are being serialized which allows for easy saving of progress and quick testing of any recent changes. This also opens up the possibility to easier implement networking and multiplayer in the future.

World Editor

In order to make iterating as easy as possible for modifying a scene, handles have been added which can be grabbed in order to move, rotate or scale an object along a selected axis. These handles can be used for both world objects and those that have their own local space.

Changes made can be easily reverted with an implemented Undo.

Newtonian Rigidbody Physics

A rigidbody physics model has been implemented to allow simulating objects that collide by moving them away from each other if they intersect. The collision model is able to take into account any convex mesh and accurately measure the intersection in order to resolve a collision.

Rather than implementing a library that handles Physics calculations and solving collisions, an implementation of those features has been calculated and implemented as a standalone system which doesn't rely on other libraries.

All objects marked with a collider check for collisions using the GJK (Gilbert–Johnson–Keerthi) algorithm and get resolved using EPA (Expanding Polytope Algorithm). Meaning that any meshes can be checked for collisions as long as they have convex shapes.