56 lines
1.3 KiB
GLSL
56 lines
1.3 KiB
GLSL
//
|
|
// 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.0 && 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);
|
|
}
|