123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /**
- * @author alteredq / http://alteredqualia.com/
- * @authod mrdoob / http://mrdoob.com/
- * @authod arodic / http://aleksandarrodic.com/
- */
- THREE.StereoEffect = function ( renderer ) {
- // API
- this.separation = 0;
- this.offset = 0;
- // internals
- var _width, _height, _offset;
- var _position = new THREE.Vector3();
- var _quaternion = new THREE.Quaternion();
- var _scale = new THREE.Vector3();
- var _cameraL = new THREE.PerspectiveCamera();
- var _cameraR = new THREE.PerspectiveCamera();
- // initialization http://www.youtube.com/watch?v=3xWiBCIxjIk
- renderer.autoClear = false;
- this.setSize = function ( width, height ) {
- _width = width / 2;
- _height = height;
- _offset = _width * this.offset;
- renderer.setSize( width, height );
- };
- this.render = function ( scene, camera ) {
- scene.updateMatrixWorld();
- if ( camera.parent === undefined ) camera.updateMatrixWorld();
-
- camera.matrixWorld.decompose( _position, _quaternion, _scale );
- // left
- _cameraL.fov = camera.fov;
- _cameraL.aspect = 0.5 * camera.aspect;
- _cameraL.near = camera.near;
- _cameraL.far = camera.far;
- _cameraL.setViewOffset( _width, _height, this.offset * _width / 2.0, 0, _width, _height);
- //_cameraL.updateProjectionMatrix();
- _cameraL.position.copy( _position );
- _cameraL.quaternion.copy( _quaternion );
- _cameraL.translateX( - this.separation );
- _cameraL.updateMatrixWorld();
- // right
- _cameraR.fov = camera.fov;
- _cameraR.aspect = 0.5 * camera.aspect;
- _cameraR.near = camera.near;
- _cameraR.far = camera.far;
- _cameraR.setViewOffset( _width, _height, - this.offset * _width / 2.0, 0, _width, _height);
- //_cameraR.projectionMatrix = _cameraL.projectionMatrix;
- _cameraR.position.copy( _position );
- _cameraR.quaternion.copy( _quaternion );
- _cameraR.translateX( this.separation );
- _cameraR.updateMatrixWorld();
- renderer.setViewport( 0, 0, _width * 2, _height );
- renderer.clear();
- //world.updateLeft();
- renderer.setViewport( 0, 0, _width, _height );
- renderer.render( scene, _cameraL );
- //world.updateRight();
- renderer.setViewport( _width, 0, _width, _height );
- renderer.render( scene, _cameraR );
- };
- };
|