OpenGL Game Engine
This project was created to experiment with OpenGL, GLSL for development of shaders, RakNet for simple implementation of a networking feature, and PhysX for an exploration of basic physics. It taught me the basics of C++ in an effective way and helped shape the way I create and implement code in projects today.
Engine: OpenGL and associated API coded directly through Visual Studio Platform: PC Completed: May 2016 Contributors: Only myself
Description of Features:
- C++ and OpenGL: This project was created in C++ using OpenGL for the graphics rendering, GLSL for the shaders and RakNet for the networking.
- Landscape: The terrain was created using a grid of heights at certain points on a plane and then using the shader to smooth the rendering between those points.
- Shaders and Post Processing: The shader on the terrain blends between two textures based on the heights of the points with an ambient green as a base colour. The Soulspear shader uses a texture, a normal map and a specular map to create a more 3D effect. I also included two post processing effects that can be turned on, a blur effect and a distortion effect that uses the shader to offset the rendering to the screen.
- Camera Frustum Culling: I have an example of camera frustum culling with an animated character model and its collision using a sphere offset from the mesh to demonstrate the model not rendering when the sphere goes out of camera view.
- 3D Sound Effects: Using fmod I have a 3D sound effect at [0, 0, 0] in the world.
- Networked Movement and Terrain Collision: By utilising RakNet I was able to get a basic character (sphere) with replicated movement and terrain collision handled by the server. The character on both the server and the client can move and fire example projectiles, all movement replicated to server and client, including collision detection to reset any character hit with a projectile. I was also able to implement terrain collision with these characters using the array of heights for the terrain and gravity to simulate falling when going down a steeper slope.
- Spring Joint Physics: As an extra bonus I was able to simulate spring joint physics with spheres and a plane in an extra section of this project. This was done by implementing simple collision checks and constraints to joined spheres and a force applied equivalent to their velocity whenever a collision occurs.
- PhysX Addition: In a separate project I was able to utilise a PhysX library to simulate projectiles and ragdoll physics and fluid particle behaviour as well as dynamic and static 3D shapes and trigger boxes.


Further Links:
- PC Build
- Spring Joint Physics
- Source code available on request
Other Experiments (2016-2019)
My other experiments over the last three years have included the following projects at various times:
- Overwatch Clone: During the uni break at the end of 2016/beginning of 2017, I started a simple project in UE4 where I began replicating the various game mechanics of each unique character in Overwatch. Perhaps my biggest achievement in this project was the creation of a dynamic networked arena utilising a modified A* algorithm to generate three floors of playable area that were different each game. I reused this algorithm recently in one of the final projects of my Bachelor Degree in the second semester of 2018.
- World of Warcraft Sample Addon: During the first half of 2017 I gained an interest in exploring new programming languages, and the only project that I somewhat completed was a sample addon for World of Warcraft, made in Lua. All that it really did was spawn a sample UI interface with a couple of clickable options and boxes which modified the gathered data from the game to be rendered on screen or in the chat window.
- RPG Template: During the second half of 2017, I began constructing a sample RPG template using UE4’s Third Person Template as the starting project. I implemented an interactable system using a raytrace from the centre of the screen that called an overwritable function on an actor if it collided. I began implementing a dynamic questing system which included kill, collect, escort, speak to, and go to quests. I stopped working on this project due to work and uni commitments at the time.
- Web Database Project: During the first half of 2018, I was required to create a simple website that used a database as part of my Bachelor Degree course. This used HTML and Javascript for the majority of it, with PHP to act as the interface for calls to and from the mySQL database. I created a simple four page website that acted as a very simple forum, where one could view a topic and responses, create new topics, and, while logged into the site – a user could create a new account, the data of which was stored in the server using a hashing algorithm – could comment and post on other people’s topics. It was a simple and modest project but one I enjoyed doing as I learned something new surrounding the use of databases and their connection to PHP, Javascript and HTML.
- AI Projects: During the start of 2019, I focused on learning UE4’s AI system and the way it communicates between Blueprints and C++. I learned all about the Behaviour Tree and Blackboard system, as well as creating an AI character, character controller, and tasks/actions. This knowledge inspried my Crowd Generation Tool, which as of October 2019, is nearing completion. I also began to implement this in another personal project that is currently on the backburner while I focus on the Crowd Generation Tool, my Real Time Strategy Game, and finding employment in the Games Industry.