36 lines
791 B
GLSL
36 lines
791 B
GLSL
layout (location = 0) uniform float u_alpha;
|
|
|
|
in vec2 v_uv;
|
|
|
|
out vec4 o_color;
|
|
|
|
float atan2(in vec2 p){
|
|
return p.x == 0. ? sign(p.y)*PI/2. : atan(p.y, p.x);
|
|
}
|
|
|
|
float map(in vec2 p, in float t) {
|
|
if (p.x >= 2.) return 0.;
|
|
|
|
vec2 v = vec2(.3, .4 + t*.3);
|
|
for (float i = 0.; i < 10.; ++i) {
|
|
p = abs(p) - v;
|
|
v /= dot(p, p);
|
|
}
|
|
return abs(p.x);
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 uv = v_uv * uni.resolution.xy / (4.*uni.dpi);
|
|
|
|
vec2 polar = vec2(length(uv), atan2(uv));
|
|
polar.y = abs(mod(polar.y, PI/3.) - PI/6.);
|
|
|
|
vec2 p = vec2(cos(polar.y), sin(polar.y))*polar.x;
|
|
|
|
o_color = vec4(0, 0, 0, .7*u_alpha);
|
|
|
|
float t = 1.-pow(1.-u_alpha, 8.);
|
|
float fractal = step(100.-t*100.+3., map(p*1.8, t)) * polar.x;
|
|
o_color = mix(o_color, vec4(.4, .2, .2, .1), fractal);
|
|
}
|