Dillon Drummond

Game Developer & Software Engineer

Dilgine


Features


3D Rendering

.obj Models

Textures

Component-Based Objects

Level Serialization

Overview


  This project is the result of my Game Engine course where we created a game engine in C++ throughout the semester. I used several different patterns and features such as a structure of arrays, component-based game objects, and level serialization. I learned about CI/CD using Github Actions. For my final project, I implemented the Vulkan graphics library into the engine with 3D mesh renderer components. Models can be loaded in with textures and transformed in 3D space.

  As far as open-source software used in the engine, I use SDL for application windows, Vulkan for rendering, glm for matrices and 3D math, tinyobjloader for loading OBJ files, and stb for loading images.

Tools


C++

WIN32

Vulkan

SDL

tinyobjloader

stb

Reflection


  Working on a game engine really helped me solify my knowledge of memory management and backend system design. I had to make all the decisions and figure out how the objects in the game scene would be loaded, stored, and saved. I had to determine if I wanted to use a component-based system or another method of assigning logic and data. Every time you do something, you have to make all of the tools and APIs yourself. In an open source project like this, there is also the option of finding other libraries that have done certain things for you such as image and 3D model APIs, but you need to make evertything else. Not only that, but you need to make sure that everything is decoupled and generic enough to have multiple use cases while still being specific enough to actually be useful.

  If I were to continue with this project, I would add a better method of loading in models by loading in models and textures from a file with paths to the model and image files. I would also add 3D physics and the ability to create custom shaders as well. Currently, the vertex and fragment shaders Vulkan uses are simply pass-through shaders.