The last update I gave on the game engine was back in Nov 2017. A lot of improvement has occurred since then. I fixed over 15 bugs and enhanced the Collision Detection System and the Digital Asset Loader. Below is a video showing beta-version v0.0.9 of the game engine.

Improving the GJK

I have mentioned before that the collision detection system is the most complicated aspect of a game engine. Interestingly, the algorithm is quite simple. However, the complication arises from the several boundary conditions that you need to account.

The Collision Detection system worked fine between objects of similar size. For disproportionate size objects, i.e., terrain and a cube, the collision algorithm would fail 50% of the time.

There were instances where detection happened way too early or too late. Other cases were even weirder. For example, merely changing the location of the cube would cause the detection to fail. I recall an instance where changing the orientation of the cube would cause a failure.

I recall spending most of my Thanksgiving and Christmas holiday working on the issue stated above. It took me over two months to improve the collision detection between disproportionate objects. It is not perfect, but it works within constraints.

What I learned from these two months working on improving the engine, is that the GJK algorithm has several boundary conditions that your code needs to account. In the previous version of the engine, I was not considering these boundary conditions; thus the reason for the early or late detections.

If you find yourself in this situation, I recommed to take a look at these books:

Improving the Digital Asset Loader

I also improved the Digital Asset Loader (DAL). If you don't know what a DAL is, it is merely a script that loads 3D models into the engine. Previously, the script would output rendering data directly to a terminal. I would copy and paste this data into an engine file.

I improved the script to write directly to the engine file. Not only that, but you can now choose what you want to import. i.e., just 3D models, 3D animations, light, or a combination of 3D models with animations.