[Haskell-cafe] Scene description/construction
andrewcoppin at btinternet.com
Mon Mar 30 15:38:12 EDT 2009
John Van Enk wrote:
> > Declarative 3D scene construction? ;-)
> On Mon, Mar 30, 2009 at 3:16 PM, Andrew Coppin
> <andrewcoppin at btinternet.com <mailto:andrewcoppin at btinternet.com>> wrote:
> Sebastiaan Visser wrote:
> Lennart, what is the next language DSL you are going to build?
> Prolog? XSLT?
> Declarative 3D scene construction? ;-)
> (What? I can wish, can't I?)
I was going to write an email about this anyway, so...
POV-Ray already has a very nice scene description language:
Originally it was just for *describing* scenes. However, it slowly
mutated and became a Turing-complete scene *construction* language.
Unfortunately, it does this using macro-style textual substitution, so
it's slow as hell, and maddening to debug.
Obviously Haskell is a far superior _programming language_. No need to
elaborate further on that. It simply remains to come up with a good set
of abstractions and a convinient syntax for a scene description DSL and
(The question then becomes, "what do you do with this description?"
Obvious answers include pretty printing it as POV-Ray SDL or writing
your own ray tracer and feeding it to that.)
Initially I was focusing on taking POV-Ray's existing SDL and simply
removing the macros and putting in something more elegant (i.e.,
Haskell). But now I'm thinking it might be better to design an entire
new language from scratch instead. POV-Ray's SDL has a few limitations:
- Messy stuff that exists only for backwards compatibility.
- Each primitive can be described in only one way. (E.g., a cylinder can
only be described by a radius and two endpoints. Not by, say, a center
point, a length, and a diammeter.) There is no particular reason for
such a limitation to exist.
- There is no support for "inspecting" things which have already been
constructed. E.g., you can't take an existing object, remove its
texturing and replace it. You can only add another texture layer on top.
- Given a powerful language like Haskell, you could go crazy and start
trying to do parametric moddelling, physical simulations, etc.
So there you have it. A typical hobby project: tonnes of ideas, few
concrete design plans.
More information about the Haskell-Cafe