StereoEffect.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /**
  2. * @author alteredq / http://alteredqualia.com/
  3. * @authod mrdoob / http://mrdoob.com/
  4. */
  5. THREE.StereoEffect = function ( renderer ) {
  6. // API
  7. this.separation = 6;
  8. this.targetDistance = 100;
  9. // internals
  10. var _width, _height;
  11. var _cameraL = new THREE.PerspectiveCamera();
  12. var _cameraR = new THREE.PerspectiveCamera();
  13. var _target = new THREE.Vector3();
  14. // initialization
  15. renderer.autoClear = false;
  16. this.setSize = function ( width, height ) {
  17. _width = width / 2;
  18. _height = height;
  19. renderer.setSize( width, height );
  20. };
  21. this.render = function ( scene, camera ) {
  22. _target.set( 0, 0, - this.targetDistance );
  23. _target.applyQuaternion( camera.quaternion );
  24. _target.add( camera.position );
  25. // left
  26. _cameraL.fov = camera.fov;
  27. _cameraL.aspect = 0.5 * camera.aspect;
  28. _cameraL.updateProjectionMatrix();
  29. _cameraL.near = camera.near;
  30. _cameraL.far = camera.far;
  31. _cameraL.position.copy( camera.position );
  32. _cameraL.translateX( - this.separation );
  33. _cameraL.lookAt( _target );
  34. // right
  35. _cameraR.projectionMatrix = _cameraL.projectionMatrix;
  36. _cameraR.near = camera.near;
  37. _cameraR.far = camera.far;
  38. _cameraR.position.copy( camera.position );
  39. _cameraR.translateX( this.separation );
  40. _cameraR.lookAt( _target );
  41. //
  42. renderer.setViewport( 0, 0, _width * 2, _height );
  43. renderer.clear();
  44. renderer.setViewport( 0, 0, _width, _height );
  45. renderer.render( scene, _cameraL );
  46. renderer.setViewport( _width, 0, _width, _height );
  47. renderer.render( scene, _cameraR, false );
  48. };
  49. };