| import { Object3D } from '../core/Object3D.js'; |
| import { WebGLRenderTargetCube } from '../renderers/WebGLRenderTargetCube.js'; |
| import { LinearFilter, RGBFormat } from '../constants.js'; |
| import { Vector3 } from '../math/Vector3.js'; |
| import { PerspectiveCamera } from './PerspectiveCamera.js'; |
|
|
| |
| |
| |
| |
| |
| |
|
|
| function CubeCamera( near, far, cubeResolution, options ) { |
|
|
| Object3D.call( this ); |
|
|
| this.type = 'CubeCamera'; |
|
|
| var fov = 90, aspect = 1; |
|
|
| var cameraPX = new PerspectiveCamera( fov, aspect, near, far ); |
| cameraPX.up.set( 0, - 1, 0 ); |
| cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); |
| this.add( cameraPX ); |
|
|
| var cameraNX = new PerspectiveCamera( fov, aspect, near, far ); |
| cameraNX.up.set( 0, - 1, 0 ); |
| cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); |
| this.add( cameraNX ); |
|
|
| var cameraPY = new PerspectiveCamera( fov, aspect, near, far ); |
| cameraPY.up.set( 0, 0, 1 ); |
| cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); |
| this.add( cameraPY ); |
|
|
| var cameraNY = new PerspectiveCamera( fov, aspect, near, far ); |
| cameraNY.up.set( 0, 0, - 1 ); |
| cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); |
| this.add( cameraNY ); |
|
|
| var cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); |
| cameraPZ.up.set( 0, - 1, 0 ); |
| cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); |
| this.add( cameraPZ ); |
|
|
| var cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); |
| cameraNZ.up.set( 0, - 1, 0 ); |
| cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); |
| this.add( cameraNZ ); |
|
|
| options = options || { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter }; |
|
|
| this.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options ); |
| this.renderTarget.texture.name = "CubeCamera"; |
|
|
| this.update = function ( renderer, scene ) { |
|
|
| if ( this.parent === null ) this.updateMatrixWorld(); |
|
|
| var currentRenderTarget = renderer.getRenderTarget(); |
|
|
| var renderTarget = this.renderTarget; |
| var generateMipmaps = renderTarget.texture.generateMipmaps; |
|
|
| renderTarget.texture.generateMipmaps = false; |
|
|
| renderer.setRenderTarget( renderTarget, 0 ); |
| renderer.render( scene, cameraPX ); |
|
|
| renderer.setRenderTarget( renderTarget, 1 ); |
| renderer.render( scene, cameraNX ); |
|
|
| renderer.setRenderTarget( renderTarget, 2 ); |
| renderer.render( scene, cameraPY ); |
|
|
| renderer.setRenderTarget( renderTarget, 3 ); |
| renderer.render( scene, cameraNY ); |
|
|
| renderer.setRenderTarget( renderTarget, 4 ); |
| renderer.render( scene, cameraPZ ); |
|
|
| renderTarget.texture.generateMipmaps = generateMipmaps; |
|
|
| renderer.setRenderTarget( renderTarget, 5 ); |
| renderer.render( scene, cameraNZ ); |
|
|
| renderer.setRenderTarget( currentRenderTarget ); |
|
|
| }; |
|
|
| this.clear = function ( renderer, color, depth, stencil ) { |
|
|
| var currentRenderTarget = renderer.getRenderTarget(); |
|
|
| var renderTarget = this.renderTarget; |
|
|
| for ( var i = 0; i < 6; i ++ ) { |
|
|
| renderer.setRenderTarget( renderTarget, i ); |
|
|
| renderer.clear( color, depth, stencil ); |
|
|
| } |
|
|
| renderer.setRenderTarget( currentRenderTarget ); |
|
|
| }; |
|
|
| } |
|
|
| CubeCamera.prototype = Object.create( Object3D.prototype ); |
| CubeCamera.prototype.constructor = CubeCamera; |
|
|
|
|
| export { CubeCamera }; |
|
|