kaleidoscopeShader top-level property
Implementation
final ShaderObject kaleidoscopeShader = ShaderObject("KaleidoscopeF")
..AddUniformVars([uScale, uCenter2, uTexture])
..SetBody([
"""
vec2 kaleidoscope( vec2 uv, float n) {
float PI = 3.1415926;
float angle = PI / n;
float r = length(uv);
float a = atan( uv.y, uv.x ) / angle;
a = mix( fract( a ), 1.0 - fract( a ), mod( floor( a ), 2.0 ) ) * angle;
return vec2( cos( a ), sin( a ) ) * r;
}
void main() {
vec2 dim = vec2(textureSize(${uTexture}, 0));
vec2 p = gl_FragCoord.xy / dim;
vec2 uv = ${uCenter2} + kaleidoscope(p - ${uCenter2}, ${uScale});
${oFragColor} = texelFetch(${uTexture}, ivec2(uv * dim), 0);
}
"""
]);