69 lines
1.4 KiB
GLSL
69 lines
1.4 KiB
GLSL
#version 330 core
|
|
|
|
out vec4 fragColor;
|
|
|
|
uniform float u_time;
|
|
uniform uint u_frame;
|
|
uniform vec2 u_resolution;
|
|
uniform vec2 u_mouse;
|
|
|
|
// Source:
|
|
// https://github.com/kbinani/colormap-shaders/blob/master/shaders/glsl/MATLAB_jet.frag
|
|
float colormap_red(float x) {
|
|
if (x < 0.7) {
|
|
return 4.0 * x - 1.5;
|
|
} else {
|
|
return -4.0 * x + 4.5;
|
|
}
|
|
}
|
|
|
|
float colormap_green(float x) {
|
|
if (x < 0.5) {
|
|
return 4.0 * x - 0.5;
|
|
} else {
|
|
return -4.0 * x + 3.5;
|
|
}
|
|
}
|
|
|
|
float colormap_blue(float x) {
|
|
if (x < 0.3) {
|
|
return 4.0 * x + 0.5;
|
|
} else {
|
|
return -4.0 * x + 2.5;
|
|
}
|
|
}
|
|
|
|
vec4 colormap(float x) {
|
|
float r = clamp(colormap_red(x), 0.0, 1.0);
|
|
float g = clamp(colormap_green(x), 0.0, 1.0);
|
|
float b = clamp(colormap_blue(x), 0.0, 1.0);
|
|
return vec4(r, g, b, 1.0);
|
|
}
|
|
|
|
// Julia
|
|
vec2 f(vec2 z, vec2 c) {
|
|
return vec2(z.x * z.x - z.y * z.y, 2 * z.x * z.y) + c;
|
|
}
|
|
|
|
float pi = 2.0 * asin(1.0);
|
|
|
|
void main() {
|
|
// Changes with time
|
|
// float a = 2.0 * pi * (int(u_frame) % 500) / 500.0;
|
|
// vec2 c = 0.7885 * vec2(cos(a), sin(a));
|
|
|
|
// Changes with cursor position
|
|
vec2 c = u_mouse.xy / u_resolution.xy * 2.0 - vec2(1.0, 1.0);
|
|
|
|
vec2 z = gl_FragCoord.xy / u_resolution.xy * 3.0 - vec2(1.5, 1.5);
|
|
int i = 0;
|
|
while (length(z) <= 2 && i < 1000) {
|
|
z = f(z, c);
|
|
i++;
|
|
}
|
|
if (i == 1000) {
|
|
fragColor = vec4(vec3(0.0), 1.0);
|
|
} else {
|
|
fragColor = colormap(smoothstep(0.0, 20.0, i));
|
|
}
|
|
}
|