CubeCamera.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { Object3D } from '../core/Object3D.js';
  2. import { Vector3 } from '../math/Vector3.js';
  3. import { PerspectiveCamera } from './PerspectiveCamera.js';
  4. const fov = 90, aspect = 1;
  5. function CubeCamera( near, far, renderTarget ) {
  6. Object3D.call( this );
  7. this.type = 'CubeCamera';
  8. if ( renderTarget.isWebGLCubeRenderTarget !== true ) {
  9. console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );
  10. return;
  11. }
  12. this.renderTarget = renderTarget;
  13. const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
  14. cameraPX.layers = this.layers;
  15. cameraPX.up.set( 0, - 1, 0 );
  16. cameraPX.lookAt( new Vector3( 1, 0, 0 ) );
  17. this.add( cameraPX );
  18. const cameraNX = new PerspectiveCamera( fov, aspect, near, far );
  19. cameraNX.layers = this.layers;
  20. cameraNX.up.set( 0, - 1, 0 );
  21. cameraNX.lookAt( new Vector3( - 1, 0, 0 ) );
  22. this.add( cameraNX );
  23. const cameraPY = new PerspectiveCamera( fov, aspect, near, far );
  24. cameraPY.layers = this.layers;
  25. cameraPY.up.set( 0, 0, 1 );
  26. cameraPY.lookAt( new Vector3( 0, 1, 0 ) );
  27. this.add( cameraPY );
  28. const cameraNY = new PerspectiveCamera( fov, aspect, near, far );
  29. cameraNY.layers = this.layers;
  30. cameraNY.up.set( 0, 0, - 1 );
  31. cameraNY.lookAt( new Vector3( 0, - 1, 0 ) );
  32. this.add( cameraNY );
  33. const cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
  34. cameraPZ.layers = this.layers;
  35. cameraPZ.up.set( 0, - 1, 0 );
  36. cameraPZ.lookAt( new Vector3( 0, 0, 1 ) );
  37. this.add( cameraPZ );
  38. const cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
  39. cameraNZ.layers = this.layers;
  40. cameraNZ.up.set( 0, - 1, 0 );
  41. cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );
  42. this.add( cameraNZ );
  43. this.update = function ( renderer, scene ) {
  44. if ( this.parent === null ) this.updateMatrixWorld();
  45. const currentXrEnabled = renderer.xr.enabled;
  46. const currentRenderTarget = renderer.getRenderTarget();
  47. renderer.xr.enabled = false;
  48. const generateMipmaps = renderTarget.texture.generateMipmaps;
  49. renderTarget.texture.generateMipmaps = false;
  50. renderer.setRenderTarget( renderTarget, 0 );
  51. renderer.render( scene, cameraPX );
  52. renderer.setRenderTarget( renderTarget, 1 );
  53. renderer.render( scene, cameraNX );
  54. renderer.setRenderTarget( renderTarget, 2 );
  55. renderer.render( scene, cameraPY );
  56. renderer.setRenderTarget( renderTarget, 3 );
  57. renderer.render( scene, cameraNY );
  58. renderer.setRenderTarget( renderTarget, 4 );
  59. renderer.render( scene, cameraPZ );
  60. renderTarget.texture.generateMipmaps = generateMipmaps;
  61. renderer.setRenderTarget( renderTarget, 5 );
  62. renderer.render( scene, cameraNZ );
  63. renderer.setRenderTarget( currentRenderTarget );
  64. renderer.xr.enabled = currentXrEnabled;
  65. };
  66. }
  67. CubeCamera.prototype = Object.create( Object3D.prototype );
  68. CubeCamera.prototype.constructor = CubeCamera;
  69. export { CubeCamera };
粤ICP备19079148号