Rift is built on top of the REngine. This is my own game engine that I've been developing along
with Rift. It's split into the following 6 parts:
- General - Provides the glue and guys that hold the thing together. This includes thread pooling, an XML parser, and an AC3D file reader.
- Math - About what you'd expect from a math layer. Vectors, quaterions, matrices, rays, etc.
- Panels - This is one of my favourite parts, it's the windowing library. It has the frames, buttons, scroll bars, menus, and container
windows that you see in the game. I used boost::function and boost::bind to do all of the event handling and I am thrilled with the result.
You can dynamically attach events and objects to events at runtime. Boost is my hero.
- Physics - Here's where most of my time went. This provides the basic equations of motion as well as a full collision detection system
using the method of separating axis. It doesn't hold a candle to Bullet or Crystal Space or whatever, but it does rigid body physics fast
enough to run the game, so I'm happy with it. It's also a lot of fun to tinker with, watching things bounce around and what not.
- Renderer - An abstraction of OpenGL. It also supports shadow maps, shadow volumes, normal maps, and GLSL shaders. Again, it's not
as fancy as some, but it does a good job for me and I learned a lot while writing it.
- Sound - A thin wrapper on top of OpenAL. I develop with the mute on about 99% of the time, but I think it still makes noise.