top of page

Graphics Rendering

Solo Project

github.png
image.png
image.png

Graphics Programming

Gameplay
Programming

Git and Version Control

This project was a fantastic stepping stone in my C++ journey. Teaching me concepts like RAII memory optimisation, smart pointers and templates.

For this project, I created the game engine tools that would be necessary for building a platformer game. Similarly to how old games like DOOM built technology from scratch.

Development Time : 2 Months

Language:  C++

3D AABB Collision

image.png

For collision I decided to use traditional AABB collision but adapted it for use on 3 Axes, checking if theres overlap with the negated axis.

When a collision is detected, I rendered another cube as a debug and also added a force pushing the player away from the cube in the direction of the players vector to the cube center with an equal force, just like how forces work in real life to keep people against a surface.

I also used collision as a ground check for activating gravity

Newtonian Gravity

image.png
image.png

Because I wasn't using a game engine, there's no "tick" that you can use to interpolate movement over time which necessitates the usage of global enum states paired with a custom deltatime variable to simulate change in movement over time.

Instead of applying gravity while jumping, I instead wanted to create the parabola projectile arc that you see in most platforming games by using the variable airtime to calculate how long the player can be in the air before gravity begins to act upon them

Dynamic AI

Wander and Chase 

image.png
image.png
image.png

In it's default state, the AI wanders around within a clamped box by adding a randomised positive or negative distance onto its last position in order to make it feel as real as possible.

The AI employs a squared distance check between itself and the player and goes into attack mode if the player gets too close to the threshold set by whoever is using the system.

In chase mode the AI uses the normalised direction to the player multipled by a value over time.

Dynamic AI

Line of Sight

image.png

This gives the user more options if they would like to change the type of AI. Works the same as wander and chase behaviour but uses a dot product calculation to simulate a viewing angle of the enemy AI controlled by the user.

When the player enters the enemys viewing angle, the chase begins

Conclusion

All in all, this project was an interesting experience, a good opportunity to flesh out my knowledge of C++ and refresh myself on space transformation, Matrices, Generics and linear algebra.

In future, I may come back to this and flesh it out into a game engine. I'd like to explore an entity component system with C++.

bottom of page