Skip to content
Back to projects

Orbital Engine

A real-time 3D solar system you can fly through: animated planetary orbits, a free-roam camera, an instanced asteroid belt of thousands, dynamic lighting, and swappable skyboxes. Built on my own C++ application framework.

July 4, 2025
C++OpenGL3DGraphics
Orbital Engine

Orbital Engine is a real-time 3D solar system you can fly through. I built it for two reasons at once: I've always been a sucker for space, and I needed something demanding to push the 3D side of my own C++ application framework. A solar system turns out to be a great stress test, plenty of bodies in motion, real lighting, and a camera that has to be able to go anywhere.

Why I built it

I'd written my own C++ application framework (Lumina) and wanted to actually lean on its 3D path, not just prove it compiled. Orbiting planets, thousands of asteroids, dynamic lights, and a wrap-around skybox exercise most of a renderer at once, so if the scene ran smoothly, the framework underneath was earning its keep. And honestly, space is just a joy to render.

What it does

Earth up close, showing the material systemEarth up close, showing the material system

The instanced asteroid beltThe instanced asteroid belt

Wireframe mode, exposing the underlying meshWireframe mode, exposing the underlying mesh

Control panels for camera, lighting, and the simulationControl panels for camera, lighting, and the simulation

The rendering, and the part I like

Everything runs through the framework's OpenGL pipeline: a model registry for loading meshes, a shader path that handles multiple light sources, and a quaternion camera so there's no gimbal lock when you fly straight up over the sun.

The asteroid belt is the piece I'm happiest with. Thousands of asteroids aren't thousands of draw calls, they're one instanced draw: the mesh is uploaded once and the GPU stamps it across the belt from per-instance transforms. That's the difference between a slideshow and something you can actually orbit through.

Three render modes, normal, wireframe, and points, let you peel the scene back to the geometry, and a skybox pass wraps the whole thing in a space environment you can retune on the fly:

Default spaceDefault space

Warm galaxyWarm galaxy

Cool nebulaCool nebula

Rotating galaxyRotating galaxy

Where it's going

Orbital Engine is one of the projects I most want to come back to and rebuild properly, so a major overhaul is on the way. What's here is where it stands today, not the finished form.

Tech stack

LayerTechnologyRole
LanguageC++The simulation and rendering logic
GraphicsOpenGL 3.3+The pipeline the whole scene runs on
FrameworkLumina, my C++ application frameworkThe app shell: windowing, the OpenGL layer, and the UI
UIDear ImGuiThe camera, lighting, and simulation control panels
BuildVisual Studio (Windows)Where it compiles and runs