H3D

From HaskellWiki
Revision as of 18:35, 14 November 2006 by Matthew (talk | contribs) (Updated link to my site (which was inserted by someone else))
Jump to navigation Jump to search

H3D

Welcome to the H3D wiki. This page is meant for gathering ideas and suggestions for a 3D modelling application written in Haskell. Writing it should be about exploring the possibilites of Haskell, and adding stuff no other language else has.

Current work: getting L-systems (["HaskLS"]) working in Haskell, and going on from there...

Contributors

Please mention your nickname on #haskell, for future reference.

Also, that way we can determine how many people are willing to work on this project in the future.

If you're willing to contribute (in any way: code, idea's, feedback, even money ;)) to this project, please add your name below. (no strings attached)

  • boegel (project idea, creator of this wiki)
  • bourbaki (L-systems and Ogre3D idea)
  • sylvan (scene graph idea)
    • Also, it might be worthwhile to exploit the ongoing convergence of high-end scanline renderers (a la Pixar) and consumer hardware. Next gen hardware (and even current high-end) could definatly produce movie-quality (honestly!) renderings with about the same throughput as a 1000-machine rendering farm, but with much less latency (one computer producing frames every two seconds, instead of a thousand computers producing one frame each every thirty minutes) which is definatly preferably from an artists standpoint.
  • ["shelarcy"] (introduce Japanese page and write that summary)
  • Pseudonym (follow Renderman interface)
  • pipe (wolfgang8k):
    • write your own scanline renderer in Haskell, use OpenGL for real-time stuff (or write a renderer yourself)
    • start with a scenegraph (Haskell type) and a simple command line interface
    • use the CLI for basic operations on the scenegraph (adding stuff)
    • create a GUI with buttons which are bound to function like addSphere :: Scene -> Scene
    • keep a list a scenes for undo/redo purposes (a lot of memory, but very simple)
    • figure out a system for selecting objects (selection = list of integers, indices of objects in the scene)
    • functions like translate, scale, rotate of type Scene -> [Int] -> (dx,dy,dz) -> Scene
    • system for editing attributes of objects (radius of a Sphere, intensity of a light source)
    • with OpenGL, you only need a function in IO monad which takes a Scene value and renders it
  • marcusl : maybe interested in providing some scene graph bindings.

Open questions and suggestions

  • What do we want ?

An open source application that has to do with 3D modelling. Probably something real-time (like Maya and Blender), but not just another 3D modeller. We want to show off Haskell's strengths, and use techniques unique to Haskell and functional programming.

  • What can we use that is already available ?

Ogre3D: open source graphics engine; G3D: http://g3d-cpp.sourceforge.net/; L-systems: technique to create plants, feathers and the lot; SDL bindings (Lemmih); HOpenGL: OpenGL binding for Haskell; Monads (in Haskell) -> http://haskell.org/hawiki/MonadsAsContainers

  • Where do we begin ?

First idea: build an L-system, then create a simple Ogre3D binding to visualize stuff

Second idea: start with a scene graph, and implement simple stuff like polygon soups and parametric surfaces at first

  • How do we use Ogre3D from within Haskell ?

Use a C interface that doesn't exist yet :-)

http://www.ogre3d.org/phpBB2/viewtopic.php?p=76429#76429

or use Hacanon to call C++ code from within Haskell: [1]

  • How far will we go with this ?

Don't know, as long as it's fun !

  • More open questions ?

boegel


One suggestion i would like to make is to use an existing 3D engine like www.ogre3d.org and just write a wrapper in haskell. So one can do all the fancy math stuff in haskell and just push the meshes and such into the engine.

This would make it necessary to write a good and flexible mesh class. I would prefer something with which you can do fancy things like glueing two meshes. Maya has some interesting features that could easily be implemented that way.

bourbaki

Suggestions - idea's - stuff we can use

Here are some ideas (feel free to add !):

Any suggestions are welcome !


boegel


Note to self:

L-system information

* http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/assignments/ex3.pdf
* http://planet.plt-scheme.org/
* http://matt.blissett.me.uk/programming/haskell/lsystem/

Useing Hray to render the Lsystems maybe useing metaballs for the branches