Castor3D is a multiplatform 3D engine written in C++ 14.
It uses a descriptive and easily comprehensible scene files text format.
It works on Windows and on GNU/Linux (GTK).
It uses OpenGL (with GLSL).
This engine is still a work in progress.
Download the source code from github to contribute!


The supported features are those:

  • GLSL shaders, with shader code written directly from C++ code.
  • Shaders are automatically generated, depending on the materials’ passes’ configuration.
  • Texture channels, to help automatic shaders generation.
  • Tangent space generation when needed.
  • Descriptive and comprehensible scene files format.
  • HDR rendering, with various tone mapping algorithms supported.
  • Skeleton animations.
  • Per-vertex animations.
  • Synchronous render loop (via timers) or asynchronous render loop (via threads).
  • Modular architecture, through different plug-ins types.
  • Compilable on supported platforms, using CMake.


The supported plug-ins types are: Importer, Divider, Renderer, PostEffect, Technique, Generic and ToneMapping.


Importer plug-ins allow the importing of various mesh files.
Currently implemented:

  • AssimpImporter, using ASSIMP library, to import a wide range of formats.
  • PlyImporter, used to import large PLY meshes (for which ASSIMP encounters some problems).
  • FbxImporter, based upon FbxSDK and used to import FBX meshes.
  • OBJ, ASE, MD2, MD3, 3DS, LWO: enabled if ASSIMP is not installed.


Divider plug-ins allow mesh subdivision using various algorithms.
Currently implemented:

  • PN-Triangles subdivision surfaces;
  • Phong patches;
  • Loop patches.


Allows the selection of the rendering API.
Currently implemented:

  • GlRenderSystem, to use OpenGL.
  • TestRenderSystem, a test renderer, which does nearly nothing, but allows tests implementation.


Technique plug-ins allow the creation of custom rendering techniques.
Currently implemented:

  • Direct: Default one, nothing special about it.
  • MSAA: Multi-sampling anti aliasing


Plug-in type that allows post processing effects.
Currently implemented:

  • Bloom: HDR bloom post effect.
  • GrayScale.


Used by HDR rendering, to customise the tone mapping type.
Currently implemented:

  • LinearToneMapping: Default tone mapping.
  • HaarmPieterDuikerToneMapping: Haarm Pieter Duiker tone mapping.
  • HejlBurgessDawsonToneMapping: Hejl Burgess Dawson tone mapping.
  • ReinhardToneMapping: Reinhard tone mapping.


Plug-in type which allows to extend the behaviour of Castor3D.
Currently implemented:

  • CastorGUI: to build GUIs inside Castor3D scenes.

Some additional projects are also generated:

  • ImgConverter: Allows you to convert any image file type to XPM or ICO.
  • CastorUtilsTest: Allows you to run unit and performance tests for CastorUtils.
  • Castor3DTest: Allows you to run unit tests for Castor3D.
  • CastorViewer: A scene viewer demonstrating the use of Castor3D.


The documentation for CastorUtils and Castor3D can be generated using Doxygen.

Leave a Reply

Your email address will not be published. Required fields are marked *