Annulus is a personal project I started working on in this week. As a game programming student at FIEA, UCF, it is going to be the project which I will be working on through the following 8 weeks as a part of the curriculum. I will be posting updated weekly on my website and its source code is available on my GitHub.
I have always been curious about game physics and after working on a game engine in the previous semester, I knew that I wanted to attempt to work on a physics engine as since I wanted to learn more about software/engine architecture apart from programming physics. Annulus is going to be my attempt at a platform agnostic 2D physics engine written in C++!
Specifications / Objective
The specifications of the physics engine I am attempting to make are as follows:
- A 2-D physics engine supporting rigid body dynamics.
- Support for bodies having material properties including density, restitution and friction.
- Support for discrete collision detection.
- Collisions between convex polygons using Separating Axis Theorem (SAT).
- Support for constraints, and as a stretch goal, support for handling systems of constraints.
I will also visualize the collision system in a Testbed project using SFML, a cross platform software development API.
For the first week, my objective was to conduct as much physics related research as possible. Decide on which algorithms I will be using and what resources I will be using as a reference. Decide an API for visualizing the project and setting it up and get the game loop running.
I was able to achieve most of the above except for some concepts of physics. I still have to read more theory on constraints and Gilbert-Johnson-Keerthi algorithm for collision detection. However, as mentioned earlier, I have concluded that I will be using SFML for visualizing the project and set up the game loop in Visual Studio 2015.
I will be using Erin Catto’s Box2D as my reference physics engine along with his material provided through GDC archives and tutorials. I have made a pass at understanding the architecture of Box2D and referred to other physics based projects as well.
- Testbed Project
- Set up SFML.
- Implemented the game loop.
- Tested the update call to for physics engine.
- Annulus (Static Library Project)
- World Class – A class which will manage all physics entities, their allocation and releasing of resources. The user will call methods on the world object in their game loop.
- Settings Class – Defines the settings with which define the behavior of a world, such as the gravity for the world.
- GameClock and GameTime Class – Classes which use the chorno time library of C++ to encapsulate objects useful for maintaining game clock.
- Integrated GLM Math library.