ionEngine is a C++ rendering engine that I wrote while a student at Cal Poly. It was used for my master's thesis as well as some scientific visualization work. Development of ionEngine has been discontinued. I'm working on a Direct3D 11 port that is closed-source for the time being.
ionEngine is made up of several libraries:
- ionCore: basic typedefs and boilerplate, some string and file helpers, standard library helpers
- ionMath: vector classes for 2, 3, and 4 dimensions. A custom “color” class that encapsulates a vec3 or vec4 with implicit conversions between float and byte colors. Other geometric primitives including rays, lines, boxes, triangles, etc.
- ionWindow: generic interface and helpers for operating system utilities, in particular window/context creation
- ionGraphics: generic and modular interface for any rendering API, in particular for OpenGL
- ionScene: scene interface that provides basic mesh loading, encapsulated renderable objects, and extensibility to add multipass rendering and other advanced functionality
- ionScience: algorithm implementations useful for various scientific applications, including long/lat classes, marching cubes, ear clipping, volumetric data rendering
ionEngine provides features through a large number of optional modules so that only the necessary components need to be included in a project.
Features included in ionEngine or additional modules are:
- Component-entity based scene graph which is renderer-agnostic to maximize extendability
- Forward and deferred lighting systems implemented using OpenGL
- Bloom, SSAO, depth-of-field, and other post-processing effects
- Volumetric utilities such as a shader-based raycast volume renderer and marching cubes implementation
- GUI elements provided through dear imgui
- Windowing and input provided through GLFW
Source code is available on GitHub
Further information can be found at ionengine.io.
ionEngine is licensed under the MIT license