Linderdaum is a composite piece of software. It consists of a basic runtime system Linderdaum Engine Runtime which manages every possible low-level operation:
- file operations
- class instantiation/management
- network transfer
- user command queue handling
- virtual machine and script sompiler interfaces
and a number of high-level systems. Main of them is the Rendering infrastructure, consisting of:
- Renderer (abstraction of rendering API)
- SceneManager and iSceneNode-based classes (hierarchical scene graph)
- DrawingCanvas class, responsible for immediate drawing operations like line/plane/sphere drawing
The rendering infrastructure depends on resources, namely the meshes, shaderprograms, textures and materials.
- Material class contains actual physical material properties and references to the textures (diffuse,specular,bump ...)
- ShaderProgram class is the abstraction of vertex/fragment/geometry shaders
- TextureObject class, managing the textures (1D, 2D, 3D and cube)
- Mesh class, containing a piece of scenegraph with apporpriate materials and vertex arrays. Meshes are directly loaded from .ASE and .MD5 files exported from content creation tools.
The rendering of volume data is made by a special LVLib, which is seamlessly integrated into the common polygonal rendering pipeline.
For the creation of advanced photorealistic effects rendering system is extended further with the following 'atmospheric' classes:
- SkyDome (Perez-formulae based sky colouring and daytime tracking)
- Terrain (a collection of TerrainNodes, automatically tracking the camera position to avoid overdraw)
- Atmosphere (a postprocessor with a Preetham scatterer)
- Clouds (volume-raycasting objects with automatic impostor generation)
- Water (a terrain-based heightmap [FFT-generated or statically precomputed] and a postprocessor to render realistic fresnel refraction)
- Forest/Tree classes providing automatic vegetation system
- Rain/Snow effect (particle-based ?)
Each of the rendering (meshes, terrains and other atmospheric items) classes provides a RenderDirect() method to render them directly to
the currently active frame buffer and a GetSceneNode() interface to attach them to the global scenegraph and render them automatically by the appropriate call. The scenegraph is the preferred way of rendering, because the engine automatically sorts nodes to perform less rendering state switches.