3D Game Engine Written in C++

See On Github

Some History

TLDR: I always wanted to create a game engine from scratch, but never had the time or know how. After programming for 8 years (at the time of writing this) and taking numerous related game dev courses, I feel like I have built up enough knowledge and confidence to start building a game engine from the ground up.

When I started school, I told myself that I wouldn’t go into game development. It seemed too far fetched and out of reach for me. However, as I started taking more advanced classes, I found the game related courses always to be the most interesting. The first game related class I took was a computer graphics course. We went over the graphics pipeline, modeling, animation, rendering, opengl programming, basic lighting and texturing, shader programming, ray tracing, etc. I was very interested that I got an A+ on this course somehow. The group project was a lot of fun (you can see the results here). I built a very basic 3d engine from scrath for my group to use. It was pretty simple, and lots of things were coded specifically for our problem. We didn’t have much time, so we had to take shortcuts.

After the graphics course, I just end up taking anything related to graphics and games development.

Related Courses:

While C++ is not related to games specifically, it is the standard in game development. So C++ seemed like a no brainer to take. On the other head, both Image Processing and Computer Vision have similarities to game development. Techniques learned in Image Processing can be used with shader programming and other graphic programming techniques. Computer Vision has a lot of overlap with computer graphics and 3D math. Compilers was the least related to games, but I think the class helped increase my programming proficiency. Understanding what compilers do and don’t do for you is very important for making things go fast. Knowing that the code you write has to be ran on a real machine with real constraints is important to know. Writing a compiler from scratch makes you learn a lot about programming and performance. It was very challenging and very fun as well.

Philosophy for writing this engine

Things I learned/Implemented

Some Screenshots

Some overly glossy marble material

Gold head, sphere, and plane to show reflections using IBL (Image Based Lighting)

Showing a painted cemented material

Showing a rusted iron material

Showing a wood material

An early prototype of the editor using QT

Editor moved and reimplemented in ImGui. (Early ui)

Editor with default layout

Editor with a 4 panel Layout

Basic scripting and animation of entities