56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import { | ||
|  | 	StereoCamera, | ||
|  | 	Vector2 | ||
|  | } from 'three'; | ||
|  | 
 | ||
|  | class StereoEffect { | ||
|  | 
 | ||
|  | 	constructor( renderer ) { | ||
|  | 
 | ||
|  | 		const _stereo = new StereoCamera(); | ||
|  | 		_stereo.aspect = 0.5; | ||
|  | 		const size = new Vector2(); | ||
|  | 
 | ||
|  | 		this.setEyeSeparation = function ( eyeSep ) { | ||
|  | 
 | ||
|  | 			_stereo.eyeSep = eyeSep; | ||
|  | 
 | ||
|  | 		}; | ||
|  | 
 | ||
|  | 		this.setSize = function ( width, height ) { | ||
|  | 
 | ||
|  | 			renderer.setSize( width, height ); | ||
|  | 
 | ||
|  | 		}; | ||
|  | 
 | ||
|  | 		this.render = function ( scene, camera ) { | ||
|  | 
 | ||
|  | 			if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld(); | ||
|  | 
 | ||
|  | 			if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld(); | ||
|  | 
 | ||
|  | 			_stereo.update( camera ); | ||
|  | 
 | ||
|  | 			renderer.getSize( size ); | ||
|  | 
 | ||
|  | 			if ( renderer.autoClear ) renderer.clear(); | ||
|  | 			renderer.setScissorTest( true ); | ||
|  | 
 | ||
|  | 			renderer.setScissor( 0, 0, size.width / 2, size.height ); | ||
|  | 			renderer.setViewport( 0, 0, size.width / 2, size.height ); | ||
|  | 			renderer.render( scene, _stereo.cameraL ); | ||
|  | 
 | ||
|  | 			renderer.setScissor( size.width / 2, 0, size.width / 2, size.height ); | ||
|  | 			renderer.setViewport( size.width / 2, 0, size.width / 2, size.height ); | ||
|  | 			renderer.render( scene, _stereo.cameraR ); | ||
|  | 
 | ||
|  | 			renderer.setScissorTest( false ); | ||
|  | 
 | ||
|  | 		}; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export { StereoEffect }; |