Buckets:
| import { Matrix4 } from '../math/Matrix4.js'; | |
| import { Vector2 } from '../math/Vector2.js'; | |
| import { Vector3 } from '../math/Vector3.js'; | |
| import { Vector4 } from '../math/Vector4.js'; | |
| import { Frustum } from '../math/Frustum.js'; | |
| const _projScreenMatrix = /*@__PURE__*/ new Matrix4(); | |
| const _lightPositionWorld = /*@__PURE__*/ new Vector3(); | |
| const _lookTarget = /*@__PURE__*/ new Vector3(); | |
| class LightShadow { | |
| constructor( camera ) { | |
| this.camera = camera; | |
| this.bias = 0; | |
| this.normalBias = 0; | |
| this.radius = 1; | |
| this.blurSamples = 8; | |
| this.mapSize = new Vector2( 512, 512 ); | |
| this.map = null; | |
| this.mapPass = null; | |
| this.matrix = new Matrix4(); | |
| this.autoUpdate = true; | |
| this.needsUpdate = false; | |
| this._frustum = new Frustum(); | |
| this._frameExtents = new Vector2( 1, 1 ); | |
| this._viewportCount = 1; | |
| this._viewports = [ | |
| new Vector4( 0, 0, 1, 1 ) | |
| ]; | |
| } | |
| getViewportCount() { | |
| return this._viewportCount; | |
| } | |
| getFrustum() { | |
| return this._frustum; | |
| } | |
| updateMatrices( light ) { | |
| const shadowCamera = this.camera; | |
| const shadowMatrix = this.matrix; | |
| _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); | |
| shadowCamera.position.copy( _lightPositionWorld ); | |
| _lookTarget.setFromMatrixPosition( light.target.matrixWorld ); | |
| shadowCamera.lookAt( _lookTarget ); | |
| shadowCamera.updateMatrixWorld(); | |
| _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); | |
| this._frustum.setFromProjectionMatrix( _projScreenMatrix ); | |
| shadowMatrix.set( | |
| 0.5, 0.0, 0.0, 0.5, | |
| 0.0, 0.5, 0.0, 0.5, | |
| 0.0, 0.0, 0.5, 0.5, | |
| 0.0, 0.0, 0.0, 1.0 | |
| ); | |
| shadowMatrix.multiply( _projScreenMatrix ); | |
| } | |
| getViewport( viewportIndex ) { | |
| return this._viewports[ viewportIndex ]; | |
| } | |
| getFrameExtents() { | |
| return this._frameExtents; | |
| } | |
| dispose() { | |
| if ( this.map ) { | |
| this.map.dispose(); | |
| } | |
| if ( this.mapPass ) { | |
| this.mapPass.dispose(); | |
| } | |
| } | |
| copy( source ) { | |
| this.camera = source.camera.clone(); | |
| this.bias = source.bias; | |
| this.radius = source.radius; | |
| this.mapSize.copy( source.mapSize ); | |
| return this; | |
| } | |
| clone() { | |
| return new this.constructor().copy( this ); | |
| } | |
| toJSON() { | |
| const object = {}; | |
| if ( this.bias !== 0 ) object.bias = this.bias; | |
| if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; | |
| if ( this.radius !== 1 ) object.radius = this.radius; | |
| if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); | |
| object.camera = this.camera.toJSON( false ).object; | |
| delete object.camera.matrix; | |
| return object; | |
| } | |
| } | |
| export { LightShadow }; | |
Xet Storage Details
- Size:
- 2.64 kB
- Xet hash:
- c4343c66d8dca5b12c6d2804c8ad2c5a9dee19b30eb616853dcc79ef38842db7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.