hglmandel/00_Introduction.lhs

52 lines
2.5 KiB
Text
Raw Normal View History

2012-05-03 13:40:35 +00:00
## Introduction
2012-06-10 22:34:44 +00:00
I wanted to go further than my
[preceding article](/Scratch/en/blog/Haskell-the-Hard-Way/) in which I introduced Haskell.
2012-05-10 14:51:24 +00:00
2012-06-10 22:34:44 +00:00
Instead of arguing that Haskell is better, because it is functional and "Functional Programming! Yeah!", I'll give an example of what benefit
functional programming can provide.
This article is more about functional paradigm than functional language.
The code organization can be used in most imperative language.
As Haskell is designed for functional paradigm, it is easier to talk about functional paradigm using it.
In reality, in the firsts sections I use an imperative paradigm.
As you can use functional paradigm in imperative language,
you can also use imperative paradigm in functional languages.
2012-06-05 13:38:57 +00:00
2012-06-10 22:34:44 +00:00
This article is about creating a useful program.
It can interact with the user in real time.
It uses OpenGL, a library with imperative programming foundations.
But the final code will be quite clean.
Most of the code will remain in the pure part (no `IO`).
2012-06-05 13:38:57 +00:00
2012-06-10 22:34:44 +00:00
I believe the main audience for this article are:
2012-05-10 14:51:24 +00:00
2012-06-10 22:34:44 +00:00
- Haskell programmer looking for an OpengGL tutorial.
- People interested in program organization (programming language agnostic).
- Fractal lovers and in particular 3D fractal.
- Game programmers (any language)
2012-05-10 14:51:24 +00:00
2012-06-10 22:34:44 +00:00
I wanted to talk about something cool.
For example I always wanted to make a Mandelbrot set explorer.
I had written a [command line Mandelbrot set generator in Haskell](http://github.com/yogsototh/mandelbrot.git).
The cool part of this utility is that it use all the cores to make the computation (it uses the `repa` package)[^001].
[^001]: Unfortunately, I couldn't make this program to work on my Mac. More precisely, I couldn't make the [DevIL](http://openil.sourceforge.net/) library work on Mac to output the image. Yes I have done a `brew install libdevil`. But even a minimal program who simply write some `jpg` didn't worked.
2012-05-10 14:51:24 +00:00
2012-06-10 22:34:44 +00:00
This time, we will display the Mandelbrot set extended in 3D using OpenGL and Haskell.
You will be able to move it using your keyboard.
This object is a Mandelbrot set in the plan (z=0),
and something nice to see in 3D.
2012-05-03 13:40:35 +00:00
2012-06-10 22:34:44 +00:00
Here is what you'll end with:
2012-05-03 13:40:35 +00:00
2012-06-14 14:30:46 +00:00
blogfigure("GoldenMandelbulb.png","The entire Mandelbulb")
blogfigure("3DMandelbulbDetail.png","A Mandelbulb detail")
blogfigure("3DMandelbulbDetail2.png","Another detail of the Mandelbulb")
2012-05-03 13:40:35 +00:00
2012-06-10 22:34:44 +00:00
And here are the intermediate steps:
2012-05-03 13:40:35 +00:00
2012-06-10 22:34:44 +00:00
blogimage("HGL_Plan.png","The parts of the article")
From the 2nd section to the 4th it will be _dirtier_ and _dirtier_.
We start cleaning everything at the 5th section.