CubeCamera.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { Object3D } from '../core/Object3D.js';
  2. import { WebGLRenderTargetCube } from '../renderers/WebGLRenderTargetCube.js';
  3. import { LinearFilter, RGBFormat } from '../constants.js';
  4. import { Vector3 } from '../math/Vector3.js';
  5. import { PerspectiveCamera } from './PerspectiveCamera.js';
  6. /**
  7. * Camera for rendering cube maps
  8. * - renders scene into axis-aligned cube
  9. *
  10. * @author alteredq / http://alteredqualia.com/
  11. */
  12. var fov = 90, aspect = 1;
  13. function CubeCamera( near, far, cubeResolution, options ) {
  14. Object3D.call( this );
  15. this.type = 'CubeCamera';
  16. var cameraPX = new PerspectiveCamera( fov, aspect, near, far );
  17. cameraPX.up.set( 0, - 1, 0 );
  18. cameraPX.lookAt( new Vector3( 1, 0, 0 ) );
  19. this.add( cameraPX );
  20. var cameraNX = new PerspectiveCamera( fov, aspect, near, far );
  21. cameraNX.up.set( 0, - 1, 0 );
  22. cameraNX.lookAt( new Vector3( - 1, 0, 0 ) );
  23. this.add( cameraNX );
  24. var cameraPY = new PerspectiveCamera( fov, aspect, near, far );
  25. cameraPY.up.set( 0, 0, 1 );
  26. cameraPY.lookAt( new Vector3( 0, 1, 0 ) );
  27. this.add( cameraPY );
  28. var cameraNY = new PerspectiveCamera( fov, aspect, near, far );
  29. cameraNY.up.set( 0, 0, - 1 );
  30. cameraNY.lookAt( new Vector3( 0, - 1, 0 ) );
  31. this.add( cameraNY );
  32. var cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
  33. cameraPZ.up.set( 0, - 1, 0 );
  34. cameraPZ.lookAt( new Vector3( 0, 0, 1 ) );
  35. this.add( cameraPZ );
  36. var cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
  37. cameraNZ.up.set( 0, - 1, 0 );
  38. cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );
  39. this.add( cameraNZ );
  40. options = options || { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };
  41. this.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );
  42. this.renderTarget.texture.name = "CubeCamera";
  43. this.update = function ( renderer, scene ) {
  44. if ( this.parent === null ) this.updateMatrixWorld();
  45. var currentRenderTarget = renderer.getRenderTarget();
  46. var renderTarget = this.renderTarget;
  47. var generateMipmaps = renderTarget.texture.generateMipmaps;
  48. renderTarget.texture.generateMipmaps = false;
  49. renderer.setRenderTarget( renderTarget, 0 );
  50. renderer.render( scene, cameraPX );
  51. renderer.setRenderTarget( renderTarget, 1 );
  52. renderer.render( scene, cameraNX );
  53. renderer.setRenderTarget( renderTarget, 2 );
  54. renderer.render( scene, cameraPY );
  55. renderer.setRenderTarget( renderTarget, 3 );
  56. renderer.render( scene, cameraNY );
  57. renderer.setRenderTarget( renderTarget, 4 );
  58. renderer.render( scene, cameraPZ );
  59. renderTarget.texture.generateMipmaps = generateMipmaps;
  60. renderer.setRenderTarget( renderTarget, 5 );
  61. renderer.render( scene, cameraNZ );
  62. renderer.setRenderTarget( currentRenderTarget );
  63. };
  64. this.clear = function ( renderer, color, depth, stencil ) {
  65. var currentRenderTarget = renderer.getRenderTarget();
  66. var renderTarget = this.renderTarget;
  67. for ( var i = 0; i < 6; i ++ ) {
  68. renderer.setRenderTarget( renderTarget, i );
  69. renderer.clear( color, depth, stencil );
  70. }
  71. renderer.setRenderTarget( currentRenderTarget );
  72. };
  73. }
  74. CubeCamera.prototype = Object.create( Object3D.prototype );
  75. CubeCamera.prototype.constructor = CubeCamera;
  76. export { CubeCamera };