Buckets:
| import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js'; | |
| import { Object3D } from '../core/Object3D.js'; | |
| import { PerspectiveCamera } from './PerspectiveCamera.js'; | |
| const fov = - 90; // negative fov is not an error | |
| const aspect = 1; | |
| class CubeCamera extends Object3D { | |
| constructor( near, far, renderTarget ) { | |
| super(); | |
| this.type = 'CubeCamera'; | |
| this.renderTarget = renderTarget; | |
| this.coordinateSystem = null; | |
| this.activeMipmapLevel = 0; | |
| const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); | |
| cameraPX.layers = this.layers; | |
| this.add( cameraPX ); | |
| const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); | |
| cameraNX.layers = this.layers; | |
| this.add( cameraNX ); | |
| const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); | |
| cameraPY.layers = this.layers; | |
| this.add( cameraPY ); | |
| const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); | |
| cameraNY.layers = this.layers; | |
| this.add( cameraNY ); | |
| const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); | |
| cameraPZ.layers = this.layers; | |
| this.add( cameraPZ ); | |
| const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); | |
| cameraNZ.layers = this.layers; | |
| this.add( cameraNZ ); | |
| } | |
| updateCoordinateSystem() { | |
| const coordinateSystem = this.coordinateSystem; | |
| const cameras = this.children.concat(); | |
| const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras; | |
| for ( const camera of cameras ) this.remove( camera ); | |
| if ( coordinateSystem === WebGLCoordinateSystem ) { | |
| cameraPX.up.set( 0, 1, 0 ); | |
| cameraPX.lookAt( 1, 0, 0 ); | |
| cameraNX.up.set( 0, 1, 0 ); | |
| cameraNX.lookAt( - 1, 0, 0 ); | |
| cameraPY.up.set( 0, 0, - 1 ); | |
| cameraPY.lookAt( 0, 1, 0 ); | |
| cameraNY.up.set( 0, 0, 1 ); | |
| cameraNY.lookAt( 0, - 1, 0 ); | |
| cameraPZ.up.set( 0, 1, 0 ); | |
| cameraPZ.lookAt( 0, 0, 1 ); | |
| cameraNZ.up.set( 0, 1, 0 ); | |
| cameraNZ.lookAt( 0, 0, - 1 ); | |
| } else if ( coordinateSystem === WebGPUCoordinateSystem ) { | |
| cameraPX.up.set( 0, - 1, 0 ); | |
| cameraPX.lookAt( - 1, 0, 0 ); | |
| cameraNX.up.set( 0, - 1, 0 ); | |
| cameraNX.lookAt( 1, 0, 0 ); | |
| cameraPY.up.set( 0, 0, 1 ); | |
| cameraPY.lookAt( 0, 1, 0 ); | |
| cameraNY.up.set( 0, 0, - 1 ); | |
| cameraNY.lookAt( 0, - 1, 0 ); | |
| cameraPZ.up.set( 0, - 1, 0 ); | |
| cameraPZ.lookAt( 0, 0, 1 ); | |
| cameraNZ.up.set( 0, - 1, 0 ); | |
| cameraNZ.lookAt( 0, 0, - 1 ); | |
| } else { | |
| throw new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem ); | |
| } | |
| for ( const camera of cameras ) { | |
| this.add( camera ); | |
| camera.updateMatrixWorld(); | |
| } | |
| } | |
| update( renderer, scene ) { | |
| if ( this.parent === null ) this.updateMatrixWorld(); | |
| const { renderTarget, activeMipmapLevel } = this; | |
| if ( this.coordinateSystem !== renderer.coordinateSystem ) { | |
| this.coordinateSystem = renderer.coordinateSystem; | |
| this.updateCoordinateSystem(); | |
| } | |
| const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children; | |
| const currentRenderTarget = renderer.getRenderTarget(); | |
| const currentActiveCubeFace = renderer.getActiveCubeFace(); | |
| const currentActiveMipmapLevel = renderer.getActiveMipmapLevel(); | |
| const currentXrEnabled = renderer.xr.enabled; | |
| renderer.xr.enabled = false; | |
| const generateMipmaps = renderTarget.texture.generateMipmaps; | |
| renderTarget.texture.generateMipmaps = false; | |
| renderer.setRenderTarget( renderTarget, 0, activeMipmapLevel ); | |
| renderer.render( scene, cameraPX ); | |
| renderer.setRenderTarget( renderTarget, 1, activeMipmapLevel ); | |
| renderer.render( scene, cameraNX ); | |
| renderer.setRenderTarget( renderTarget, 2, activeMipmapLevel ); | |
| renderer.render( scene, cameraPY ); | |
| renderer.setRenderTarget( renderTarget, 3, activeMipmapLevel ); | |
| renderer.render( scene, cameraNY ); | |
| renderer.setRenderTarget( renderTarget, 4, activeMipmapLevel ); | |
| renderer.render( scene, cameraPZ ); | |
| // mipmaps are generated during the last call of render() | |
| // at this point, all sides of the cube render target are defined | |
| renderTarget.texture.generateMipmaps = generateMipmaps; | |
| renderer.setRenderTarget( renderTarget, 5, activeMipmapLevel ); | |
| renderer.render( scene, cameraNZ ); | |
| renderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel ); | |
| renderer.xr.enabled = currentXrEnabled; | |
| renderTarget.texture.needsPMREMUpdate = true; | |
| } | |
| } | |
| export { CubeCamera }; | |
Xet Storage Details
- Size:
- 4.45 kB
- Xet hash:
- fd59fa072aab8f07f7551a40fd59e28e0d365ad98d8e58583803f632153c64a8
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.