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 }; |