CrosseyedEffect.js 1.4 KB

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