Files
FractalInspector/shaders/julia.frag.glsl

61 lines
1.1 KiB
GLSL

#version 120
#ifdef GL_ES
precision highp float;
#endif
#define PI 3.14159265359
vec3 pal(in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d) {
return a + b*cos(6.28318*(c*t+d));
}
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
uniform vec2 u_translation;
uniform float u_scale;
uniform vec3 u_rgb_1;
uniform vec3 u_rgb_2;
uniform vec3 u_rgb_3;
uniform vec3 u_rgb_4;
uniform vec2 u_julia_set;
#define N 256. // Number of iterations?
#define B 4. // What does B mean?
float iterate_julia(vec2 p, vec2 c)
{
vec2 z = p;
float i;
for (i = 0.; i < N; i++) {
z = mat2(z, -z.y, z.x) * z + c;
if (dot(z, z) > B*B) break;
}
if (p.y < 0.f) return i;
return i - log(log(dot(z, z)) / log(B)) / log(2.);
}
void main() {
vec2 R = u_resolution.xy;
vec2 uv = (u_scale * gl_FragCoord.xy - R - 1.) / R.y - u_translation;
float n = iterate_julia(uv, u_julia_set) / N;
vec3 col = pal(fract(n + 0.5), u_rgb_1, u_rgb_2, u_rgb_3, u_rgb_4);
//if (n == 1.) {n = 0; }
gl_FragColor = vec4(n == 1. ? vec3(0) : col, 1.);
}