Spaces:
Running
Running
/** | |
* Kaleidoscope Shader | |
* Radial reflection around center point | |
* Ported from: http://pixelshaders.com/editor/ | |
* by Toby Schachman / http://tobyschachman.com/ | |
* | |
* sides: number of reflections | |
* angle: initial angle in radians | |
*/ | |
const KaleidoShader = { | |
name: 'KaleidoShader', | |
uniforms: { | |
'tDiffuse': { value: null }, | |
'sides': { value: 6.0 }, | |
'angle': { value: 0.0 } | |
}, | |
vertexShader: /* glsl */` | |
varying vec2 vUv; | |
void main() { | |
vUv = uv; | |
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); | |
}`, | |
fragmentShader: /* glsl */` | |
uniform sampler2D tDiffuse; | |
uniform float sides; | |
uniform float angle; | |
varying vec2 vUv; | |
void main() { | |
vec2 p = vUv - 0.5; | |
float r = length(p); | |
float a = atan(p.y, p.x) + angle; | |
float tau = 2. * 3.1416 ; | |
a = mod(a, tau/sides); | |
a = abs(a - tau/sides/2.) ; | |
p = r * vec2(cos(a), sin(a)); | |
vec4 color = texture2D(tDiffuse, p + 0.5); | |
gl_FragColor = color; | |
}` | |
}; | |
export { KaleidoShader }; | |