Spaces:
Running
Running
| 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'; | |
| /** | |
| * Camera for rendering cube maps | |
| * - renders scene into axis-aligned cube | |
| * | |
| * @author alteredq / http://alteredqualia.com/ | |
| */ | |
| 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 }; | |