@hackage lambdacube-engine0.2.1

3D rendering engine written entirely in Haskell

This is all highly experimental. Check out the examples package and the website for further details.

There is one important feature that none of the examples can use due to the way cabal deals with data files. You can specify the paths to your resources in an ini-style config file, which looks something like this:

Comment

[Section] Zip=path/to/resources-1.zip Zip=path/to/resources-2.zip FileSystem=path/to/more/resources/1 FileSystem=path/to/more/resources/2 ...

You can use the addConfig function (found in comments in all the examples) to load this file.

Internals: Internals overview: ...

render pipeline:
    Scene       ->  FlattenScene    ->  RenderQueue     ->  RenderablePass
     |-> Light       |-> Light          (optimize            - setup light and pass
     |-> Camera      |-> Camera          render              - render each RenderOperation (call RenderSystem's render function)
     |-> Entity      |-> RenderEntity    operations)
     
     for each RenderTarget
        renderViewport

data types:
    - RenderSystem related typeclasses
        - HardwareBuffer
        - HardwareVertexBuffer
        - HardwareIndexBuffer
        - Texture
        - GpuProgram
        - LinkedGpuProgram
        - RenderSystemCapabilities
    - World (top level data structure)
        low level model data types:
            - VertexData
            - IndexData
            - VertexDeclaration
            - VertexBufferBinding
        high level model data types:
            - SubMesh
            - Mesh
            - VectorVertexData
        material data types:
            - Material
            - Technique
            - Pass
            - TextureUnitState
        scene related data types:
            - FlattenScene
            - SceneObject
              - Entity
                    - SubEntity
                - Camera
                - Light
            - SceneNode
            - Scene
                - MkSceneObjectAction
                - MkNodeAction
            - Frustum
        high level render related data types:
            - Compositor
            - RenderTarget
            - Viewport
            - 
        low level rendering related data types:
            - Renderable (type class)
            - RenderEntity
            - RenderOperation
            - RenderablePass
            - 
        resource related data types:
            - ResourceLibrary
            - 

User Guide: - lambdacube is a rendering engine, does not care with window management and input handling. - usage: - create render system - create world: - init world with render system and resource paths and loaders - create the scene - render loop: - derive a world data for each new frame, with required world modifications