CubeCamera.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { NoToneMapping } from '../constants.js';
  2. import { Object3D } from '../core/Object3D.js';
  3. import { PerspectiveCamera } from './PerspectiveCamera.js';
  4. const fov = 90, aspect = 1;
  5. class CubeCamera extends Object3D {
  6. constructor( near, far, renderTarget ) {
  7. super();
  8. this.type = 'CubeCamera';
  9. this.renderTarget = renderTarget;
  10. const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
  11. cameraPX.layers = this.layers;
  12. cameraPX.up.set( 0, - 1, 0 );
  13. cameraPX.lookAt( 1, 0, 0 );
  14. this.add( cameraPX );
  15. const cameraNX = new PerspectiveCamera( fov, aspect, near, far );
  16. cameraNX.layers = this.layers;
  17. cameraNX.up.set( 0, - 1, 0 );
  18. cameraNX.lookAt( - 1, 0, 0 );
  19. this.add( cameraNX );
  20. const cameraPY = new PerspectiveCamera( fov, aspect, near, far );
  21. cameraPY.layers = this.layers;
  22. cameraPY.up.set( 0, 0, 1 );
  23. cameraPY.lookAt( 0, 1, 0 );
  24. this.add( cameraPY );
  25. const cameraNY = new PerspectiveCamera( fov, aspect, near, far );
  26. cameraNY.layers = this.layers;
  27. cameraNY.up.set( 0, 0, - 1 );
  28. cameraNY.lookAt( 0, - 1, 0 );
  29. this.add( cameraNY );
  30. const cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
  31. cameraPZ.layers = this.layers;
  32. cameraPZ.up.set( 0, - 1, 0 );
  33. cameraPZ.lookAt( 0, 0, 1 );
  34. this.add( cameraPZ );
  35. const cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
  36. cameraNZ.layers = this.layers;
  37. cameraNZ.up.set( 0, - 1, 0 );
  38. cameraNZ.lookAt( 0, 0, - 1 );
  39. this.add( cameraNZ );
  40. }
  41. update( renderer, scene ) {
  42. if ( this.parent === null ) this.updateMatrixWorld();
  43. const renderTarget = this.renderTarget;
  44. const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;
  45. const currentRenderTarget = renderer.getRenderTarget();
  46. const currentToneMapping = renderer.toneMapping;
  47. const currentXrEnabled = renderer.xr.enabled;
  48. renderer.toneMapping = NoToneMapping;
  49. renderer.xr.enabled = false;
  50. const generateMipmaps = renderTarget.texture.generateMipmaps;
  51. renderTarget.texture.generateMipmaps = false;
  52. renderer.setRenderTarget( renderTarget, 0 );
  53. renderer.render( scene, cameraPX );
  54. renderer.setRenderTarget( renderTarget, 1 );
  55. renderer.render( scene, cameraNX );
  56. renderer.setRenderTarget( renderTarget, 2 );
  57. renderer.render( scene, cameraPY );
  58. renderer.setRenderTarget( renderTarget, 3 );
  59. renderer.render( scene, cameraNY );
  60. renderer.setRenderTarget( renderTarget, 4 );
  61. renderer.render( scene, cameraPZ );
  62. renderTarget.texture.generateMipmaps = generateMipmaps;
  63. renderer.setRenderTarget( renderTarget, 5 );
  64. renderer.render( scene, cameraNZ );
  65. renderer.setRenderTarget( currentRenderTarget );
  66. renderer.toneMapping = currentToneMapping;
  67. renderer.xr.enabled = currentXrEnabled;
  68. renderTarget.texture.needsPMREMUpdate = true;
  69. }
  70. }
  71. export { CubeCamera };