59 lines
		
	
	
		
			1014 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1014 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 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 };
							 |