57 lines
		
	
	
		
			914 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			914 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Mirror Shader
							 | 
						||
| 
								 | 
							
								 * Copies half the input to the other half
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * side: side of input to mirror (0 = left, 1 = right, 2 = top, 3 = bottom)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const MirrorShader = {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									name: 'MirrorShader',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									uniforms: {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										'tDiffuse': { value: null },
							 | 
						||
| 
								 | 
							
										'side': { value: 1 }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									vertexShader: /* glsl */`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										varying vec2 vUv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										void main() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											vUv = uv;
							 | 
						||
| 
								 | 
							
											gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										}`,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fragmentShader: /* glsl */`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										uniform sampler2D tDiffuse;
							 | 
						||
| 
								 | 
							
										uniform int side;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										varying vec2 vUv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										void main() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											vec2 p = vUv;
							 | 
						||
| 
								 | 
							
											if (side == 0){
							 | 
						||
| 
								 | 
							
												if (p.x > 0.5) p.x = 1.0 - p.x;
							 | 
						||
| 
								 | 
							
											}else if (side == 1){
							 | 
						||
| 
								 | 
							
												if (p.x < 0.5) p.x = 1.0 - p.x;
							 | 
						||
| 
								 | 
							
											}else if (side == 2){
							 | 
						||
| 
								 | 
							
												if (p.y < 0.5) p.y = 1.0 - p.y;
							 | 
						||
| 
								 | 
							
											}else if (side == 3){
							 | 
						||
| 
								 | 
							
												if (p.y > 0.5) p.y = 1.0 - p.y;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											vec4 color = texture2D(tDiffuse, p);
							 | 
						||
| 
								 | 
							
											gl_FragColor = color;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										}`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export { MirrorShader };
							 |