Better sentences.
This commit is contained in:
parent
ae6e6c3520
commit
4a61dbb8fc
2 changed files with 15 additions and 16 deletions
|
@ -1,6 +1,6 @@
|
|||
## Naïve code cleaning
|
||||
|
||||
The first thing to do is to separate the GLUT/OpenGL
|
||||
The first approach to clean the code is to separate the GLUT/OpenGL
|
||||
part from the computation of the shape.
|
||||
Here is the cleaned version of the preceding section.
|
||||
Most boilerplate was put in external files.
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
## Optimization
|
||||
|
||||
From the architecture stand point all is clear.
|
||||
Our code architecture feel very clean.
|
||||
All the meaningful code is in our main file and all display details are
|
||||
externalized.
|
||||
If you read the code of `YGL.hs`, you'll see I didn't made everything perfect.
|
||||
For example, I didn't finished the code of the lights.
|
||||
But I believe it is a good first step and it will be easy to go further.
|
||||
The separation between rendering and world behavior is clear.
|
||||
Unfortunately the program of the preceding session is extremely slow.
|
||||
We compute the Mandelbulb for each frame now.
|
||||
|
||||
Before we had
|
||||
Before our program structure was:
|
||||
|
||||
<code class="no-highlight">
|
||||
Constant Function -> Constant List of Triangles -> Display
|
||||
|
@ -17,18 +18,16 @@ Constant Function -> Constant List of Triangles -> Display
|
|||
Now we have
|
||||
|
||||
<code class="no-highlight">
|
||||
World -> Function -> List of Objects -> Atoms -> Display
|
||||
Main loop -> World -> Function -> List of Objects -> Atoms -> Display
|
||||
</code>
|
||||
|
||||
And the World state could change.
|
||||
Then it is no more straightforward for the compiler to understand
|
||||
when not to recompute the entire list of atoms.
|
||||
The World state could change.
|
||||
The compiler can no more optimize the computation for us.
|
||||
We have to manually explain when to redraw the shape.
|
||||
|
||||
Then to optimize we will have to make things a little less separate.
|
||||
We must control the flow of atom generation.
|
||||
|
||||
Mostly the program is the same as before, but instead of providing a
|
||||
function, we will provide the list of atoms directly.
|
||||
To optimize we must do some things in a lower level.
|
||||
Mostly the program remains the same,
|
||||
but it will provide the list of atoms directly.
|
||||
|
||||
<div style="display:none">
|
||||
|
||||
|
@ -115,7 +114,6 @@ function, we will provide the list of atoms directly.
|
|||
|
||||
Our initial world state is slightly changed:
|
||||
|
||||
|
||||
> -- We initialize the world state
|
||||
> -- then angle, position and zoom of the camera
|
||||
> -- And the shape function
|
||||
|
@ -134,6 +132,8 @@ Our initial world state is slightly changed:
|
|||
> }
|
||||
> where eps=2
|
||||
|
||||
The use of `eps` is a hint to make a better zoom by computing with the right bounds.
|
||||
|
||||
We use the `YGL.getObject3DFromShapeFunction` function directly.
|
||||
This way instead of providing `XYFunc`, we provide directly a list of Atoms.
|
||||
|
||||
|
@ -213,9 +213,8 @@ All the rest is exactly the same.
|
|||
|
||||
</div>
|
||||
|
||||
And you can also consider small changes in other source files.
|
||||
And you can also consider minor changes in the `YGL.hs` source file.
|
||||
|
||||
- [`YGL.hs`](code/06_Mandelbulb/YGL.hs), the 3D rendering framework
|
||||
- [`Mandel`](code/06_Mandelbulb/Mandel.hs), the mandel function
|
||||
- [`ExtComplex`](code/06_Mandelbulb/ExtComplex.hs), the extended complexes
|
||||
|
||||
|
|
Loading…
Reference in a new issue