LambdaCubeEngine: Difference between revisions

From HaskellWiki
No edit summary
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Overview ==
== Overview ==


LambdaCube is a 3D rendering engine entirely written in Haskell.
LambdaCube 3D is Haskell-like purely functional domain specific language for programming the GPU (graphics processing unit).


The main goal of this project is to provide a modern and feature rich graphical backend for various Haskell projects, and in the long run it is intended to be a practical solution even for serious purposes. The engine uses [http://www.ogre3d.org Ogre3D]'s [http://www.ogre3d.org/docs/manual/manual_9.html#SEC12 mesh] and [http://www.ogre3d.org/docs/manual/manual_14.html#SEC23 material] file format, therefore it should be easy to find or create new content for it. The code sits between the low-level C API (raw OpenGL, DirectX or anything equivalent; the engine core is graphics backend agnostic) and the application, and gives the user a high-level API to work with.
During the years the project had lot of rewrite and reconfiguration.
It was a long journey from a Haskell OGRE clone to a graphics EDSL and finally to a standalone compiler.
Read more on [http://lambdacube3d.com/history project history] page.


An application building on LambdaCube is composed of the following layers:
Project homepage: [http://lambdacube3d.com/ http://lambdacube3d.com]


{| cellspacing="0" cellpadding="2"
== Download ==
| colspan="5" align="center" style="background: #ccccff" | application
|-
| colspan="2" style="background: #ffffcc" |  
| colspan="3" align="center" style="background: #ccffcc" | optional components
|-
| colspan="5" align="center" style="background: #ffffcc" | generic core
|-
| colspan="5" align="center" style="background: #ffcccc" | render system
|-
| align="center" style="background: #cccccc" | native OpenGL
| align="center" | or
| align="center" style="background: #cccccc" | DirectX
| align="center" | or
| align="center" style="background: #cccccc" | ...
|}
 
* optional components: e.g. loaders for various formats, physics engine
* generic core: resource handling, script loading, rendering
* render system: a thin abstraction layer to unify low-level APIs


== News ==
[https://github.com/lambdacube3d LambdaCube 3D on GitHub]


== History ==
* 2015-04-14 - New homepage: [http://lambdacube3d.com/ http://lambdacube3d.com]
* 2015-02-14 - First working DSL compiler
* 2014-11-?? - The focus turns for the DSL implementation
* 2012-08-15 - Started development [http://lambdacube3d.wordpress.com/ blog]
* 2012-03-?? - The project was reborn as an EDSL for GPU graphics programming
* 2011-06-23 - The second big release which already includes a more advanced Bullet binding and the Stunts example; details in the [http://just-bottom.blogspot.com/2011/06/renewed-lambdacube-bullet-bindings-and.html announcement]
* 2009-11-18 - The first release on Hackage: [http://hackage.haskell.org/package/lambdacube-engine engine] and [http://hackage.haskell.org/package/lambdacube-examples examples], plus a [http://hackage.haskell.org/package/lambdacube-bullet bullet example] that will eventually grow into a library
* 2009-11-18 - The first release on Hackage: [http://hackage.haskell.org/package/lambdacube-engine engine] and [http://hackage.haskell.org/package/lambdacube-examples examples], plus a [http://hackage.haskell.org/package/lambdacube-bullet bullet example] that will eventually grow into a library
* 2009-09-22 - The summer report was presented at the [http://ocaml.janestcapital.com/?q=node/68 JSSP meeting]
* 2009-09-22 - The summer report was presented at the [http://ocaml.janestcapital.com/?q=node/68 JSSP meeting]
Line 37: Line 27:
* 2009-01-?? - Development started
* 2009-01-?? - Development started


== Download ==
== Screenshots of previous iterations ==
 
=== 2012-06 - LC DSL Q3 example ===


[http://code.google.com/p/lambdacube/ LambdaCube repository at Google Code]
[[Image:Lc-q3.png|800px|Quake3 example]]


== Todo ==
=== 2012-06 - LC DSL Stunts example ===


* Must have:
[[Image:Lc-stunts-1.png|800px|Stunts example]]
** (DONE) light setup
** (DONE) frustum culling
** skeletal animation
** shadow mapping
** full shader support
** LOD support
* Medium priority:
** texture effects
** overlay support + font rendering
** terrain support (heightmap with LOD, cf. [http://www.andrasbalogh.com/RangerMk2/ SOAR])
** binary loader for the native Ogre format
** framework for supporting various shaders (glsl, Cg)
** (DONE) rewrite to [http://hackage.haskell.org/package/OpenGLRaw OpenGLRaw]
* Low priority:
** particle system
** volumetric clouds
** imposters
** Collada support
** mesh modelling interface
* Long term:
** Quake3 map loader (BSP support)


== Screenshots ==
[[Image:Lc-stunts-2.png|800px|Stunts example]]


=== 2009-11 - Hackage release ===
=== 2009-11 - Hackage release ===
Line 90: Line 61:
The code is released under BSD3.
The code is released under BSD3.


== Features ==
The engine and the examples not using physics build out of the box on a fresh Haskell Platform install under Windows. If Bullet is installed, the Stunts example should also be possible to get running with cabal-install.
 
* [http://www.ogre3d.org/docs/manual/manual_9.html#SEC12 Mesh file format]
** Geometry is supported
* [http://www.ogre3d.org/docs/manual/manual_14.html#SEC23 Material Script]
 
== Dependencies ==
 
* Core library:
** [http://hackage.haskell.org/package/OpenGL OpenGL] - to be dropped completely in favour of [http://hackage.haskell.org/package/OpenGLRaw OpenGLRaw]
** [http://hackage.haskell.org/package/uulib uulib] - used for parsing scripts
** [http://hackage.haskell.org/package/alex alex] - used for parsing scripts
** [http://hackage.haskell.org/package/fgl fgl] - scene graph handling
** [http://hackage.haskell.org/package/zip-archive zip-archive]
** [http://hackage.haskell.org/package/hslogger hslogger]
* Optional components:
** [http://hackage.haskell.org/package/stb-image stb-image] - image loader
** [http://hackage.haskell.org/package/xml xml] - Ogre interchange format loader
* Examples:
** [http://hackage.haskell.org/package/GLFW GLFW]
** [http://hackage.haskell.org/package/elerea elerea]
** [http://hackage.haskell.org/package/bullet Bullet Physics binding]
 
The engine and the examples not using physics build out of the box on a fresh Haskell Platform install under Windows.


[[Category:Applications]]
[[Category:Applications]]
[[Category:3D]]
[[Category:3D]]

Latest revision as of 14:13, 4 February 2016

Overview

LambdaCube 3D is Haskell-like purely functional domain specific language for programming the GPU (graphics processing unit).

During the years the project had lot of rewrite and reconfiguration. It was a long journey from a Haskell OGRE clone to a graphics EDSL and finally to a standalone compiler. Read more on project history page.

Project homepage: http://lambdacube3d.com

Download

LambdaCube 3D on GitHub

History

  • 2015-04-14 - New homepage: http://lambdacube3d.com
  • 2015-02-14 - First working DSL compiler
  • 2014-11-?? - The focus turns for the DSL implementation
  • 2012-08-15 - Started development blog
  • 2012-03-?? - The project was reborn as an EDSL for GPU graphics programming
  • 2011-06-23 - The second big release which already includes a more advanced Bullet binding and the Stunts example; details in the announcement
  • 2009-11-18 - The first release on Hackage: engine and examples, plus a bullet example that will eventually grow into a library
  • 2009-09-22 - The summer report was presented at the JSSP meeting
  • 2009-08-10 - Major public commit that went with the mid-summer report
  • 2009-05-12 - Project announced to be among the JSSP winners
  • 2009-03-31 - Application for Jane Street Summer Project sent in
  • 2009-01-?? - Development started

Screenshots of previous iterations

2012-06 - LC DSL Q3 example

Quake3 example

2012-06 - LC DSL Stunts example

Stunts example

Stunts example

2009-11 - Hackage release

LambdaCube basic example

2009-09 - JSSP meeting

Tile Racer track loader:

LambdaCube Tile Racer track loader example

Bullet physics integration:

LambdaCube and Bullet physics example

2009-03 - Pre-summer mock-up

Licence

The code is released under BSD3.

The engine and the examples not using physics build out of the box on a fresh Haskell Platform install under Windows. If Bullet is installed, the Stunts example should also be possible to get running with cabal-install.