|
@@ -33,31 +33,30 @@ vec3 Hsv2rgb(vec3 c)
|
|
|
|
|
|
void main()
|
|
void main()
|
|
{
|
|
{
|
|
- // The pixel coordinates scaled so they are on the mandelbrot scale
|
|
|
|
- // y also flipped due to opengl
|
|
|
|
- vec2 z = vec2((((gl_FragCoord.x + offset.x)/screenDims.x)*2.5)/zoom,
|
|
|
|
- (((screenDims.y - gl_FragCoord.y + offset.y)/screenDims.y)*1.5)/zoom);
|
|
|
|
-
|
|
|
|
- int iterations = 0;
|
|
|
|
-
|
|
|
|
/**********************************************************************************************
|
|
/**********************************************************************************************
|
|
- Julia sets use a function z^2 + c, where c is a constant.
|
|
|
|
- This function is iterated until the nature of the point is determined.
|
|
|
|
|
|
+ Julia sets use a function z^2 + c, where c is a constant.
|
|
|
|
+ This function is iterated until the nature of the point is determined.
|
|
|
|
|
|
- If the magnitude of the number becomes greater than 2, then from that point onward
|
|
|
|
- the number will get bigger and bigger, and will never get smaller (tends towards infinity).
|
|
|
|
- 2^2 = 4, 4^2 = 8 and so on.
|
|
|
|
- So at 2 we stop iterating.
|
|
|
|
|
|
+ If the magnitude of the number becomes greater than 2, then from that point onward
|
|
|
|
+ the number will get bigger and bigger, and will never get smaller (tends towards infinity).
|
|
|
|
+ 2^2 = 4, 4^2 = 8 and so on.
|
|
|
|
+ So at 2 we stop iterating.
|
|
|
|
|
|
- If the number is below 2, we keep iterating.
|
|
|
|
- But when do we stop iterating if the number is always below 2 (it converges)?
|
|
|
|
- That is what MAX_ITERATIONS is for.
|
|
|
|
- Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can
|
|
|
|
- then map to a color.
|
|
|
|
|
|
+ If the number is below 2, we keep iterating.
|
|
|
|
+ But when do we stop iterating if the number is always below 2 (it converges)?
|
|
|
|
+ That is what MAX_ITERATIONS is for.
|
|
|
|
+ Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can
|
|
|
|
+ then map to a color.
|
|
|
|
|
|
- We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared.
|
|
|
|
- And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power).
|
|
|
|
|
|
+ We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared.
|
|
|
|
+ And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power).
|
|
*************************************************************************************************/
|
|
*************************************************************************************************/
|
|
|
|
+
|
|
|
|
+ // The pixel coordinates are scaled so they are on the mandelbrot scale
|
|
|
|
+ // NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
|
|
|
+ vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom);
|
|
|
|
+
|
|
|
|
+ int iterations = 0;
|
|
for (iterations = 0; iterations < MAX_ITERATIONS; iterations++)
|
|
for (iterations = 0; iterations < MAX_ITERATIONS; iterations++)
|
|
{
|
|
{
|
|
z = ComplexSquare(z) + c; // Iterate function
|
|
z = ComplexSquare(z) + c; // Iterate function
|