12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //
- // Fragment shader for drawing the Mandelbrot set
- //
- // Authors: Dave Baldwin, Steve Koren, Randi Rost
- // based on a shader by Michael Rivero
- //
- // Copyright (c) 2002-2005: 3Dlabs, Inc.
- //
- // See 3Dlabs-License.txt for license information
- //
-
- varying vec3 Position;
- varying float LightIntensity;
-
- uniform float MaxIterations;
- uniform float Zoom;
- uniform float Xcenter;
- uniform float Ycenter;
- uniform vec3 InnerColor;
- uniform vec3 OuterColor1;
- uniform vec3 OuterColor2;
-
- void main()
- {
- float real = Position.x * Zoom + Xcenter;
- float imag = Position.y * Zoom + Ycenter;
- float Creal = real; // Change this line...
- float Cimag = imag; // ...and this one to get a Julia set
-
- float r2 = 0.0;
- float iter;
-
- // for (iter = 0.0; iter < MaxIterations && r2 < 4.0; ++iter)
- for (iter = 0.0; iter < 12 && r2 < 4.0; ++iter)
- {
- float tempreal = real;
-
- real = (tempreal * tempreal) - (imag * imag) + Creal;
- imag = 2.0 * tempreal * imag + Cimag;
- r2 = (real * real) + (imag * imag);
- }
-
- // Base the color on the number of iterations
-
- vec3 color;
-
- if (r2 < 4.0)
- color = InnerColor;
- else
- color = mix(OuterColor1, OuterColor2, fract(iter * 0.05));
-
- color *= LightIntensity;
-
- gl_FragColor = vec4(color, 1.0);
- }
|