Cuboid

A closer look

Passion Project

I am working on a 3D game named Cuboid, running on an engine written with C++ and rendered in OpenGL. It is a revision of an assignment I worked on two years ago, in which I created a basic 2D game of similar nature.

I have learned more than any of my other assignments through the ongoing development of this passion project. I have studied and implemented features like an Entity-Component-System architecture that have enhanced both my project and my knowledge immensely.

Cuboid's engine has many features:

  • Rudimentary 3D physics, decoupled from the rendering loop with a fixed timestep
  • Event sending/receiving between event listeners
  • Model loading with specular and emission mapping support
  • Scene saving/loading
  • Complex narrow-phase collision detection via the Separating Axis Theorem
  • Broad-phase collision detection via construction of an octree
  • Character controllers to allow for player and AI movement and behaviour

Problems & Solutions

In the past I faced adversity decoupling the physics updates from the rendering updates in order to allow physics to run at a fixed timestep separate from the rendering framerate; I accomplished this by enabling the physics updates to run a variable number of times between each frame update.

To solve the issue of jittery movement this change brought on, I also developed movement interpolation to allow for smooth visual movement of characters when physics were updated more than once between two frames.

Current Goals

The current task in Cuboid's development is the implementation of Lua scripting systems to allow for easy-to-create complex entity behaviour.