| 34256 | }; |
| 34257 | |
| 34258 | function createVirtualLight( light, cascade ) { |
| 34259 | |
| 34260 | var virtualLight = new THREE.DirectionalLight(); |
| 34261 | |
| 34262 | virtualLight.isVirtual = true; |
| 34263 | |
| 34264 | virtualLight.onlyShadow = true; |
| 34265 | virtualLight.castShadow = true; |
| 34266 | |
| 34267 | virtualLight.shadowCameraNear = light.shadowCameraNear; |
| 34268 | virtualLight.shadowCameraFar = light.shadowCameraFar; |
| 34269 | |
| 34270 | virtualLight.shadowCameraLeft = light.shadowCameraLeft; |
| 34271 | virtualLight.shadowCameraRight = light.shadowCameraRight; |
| 34272 | virtualLight.shadowCameraBottom = light.shadowCameraBottom; |
| 34273 | virtualLight.shadowCameraTop = light.shadowCameraTop; |
| 34274 | |
| 34275 | virtualLight.shadowCameraVisible = light.shadowCameraVisible; |
| 34276 | |
| 34277 | virtualLight.shadowDarkness = light.shadowDarkness; |
| 34278 | |
| 34279 | virtualLight.shadowBias = light.shadowCascadeBias[ cascade ]; |
| 34280 | virtualLight.shadowMapWidth = light.shadowCascadeWidth[ cascade ]; |
| 34281 | virtualLight.shadowMapHeight = light.shadowCascadeHeight[ cascade ]; |
| 34282 | |
| 34283 | virtualLight.pointsWorld = []; |
| 34284 | virtualLight.pointsFrustum = []; |
| 34285 | |
| 34286 | var pointsWorld = virtualLight.pointsWorld, |
| 34287 | pointsFrustum = virtualLight.pointsFrustum; |
| 34288 | |
| 34289 | for ( var i = 0; i < 8; i ++ ) { |
| 34290 | |
| 34291 | pointsWorld[ i ] = new THREE.Vector3(); |
| 34292 | pointsFrustum[ i ] = new THREE.Vector3(); |
| 34293 | |
| 34294 | } |
| 34295 | |
| 34296 | var nearZ = light.shadowCascadeNearZ[ cascade ]; |
| 34297 | var farZ = light.shadowCascadeFarZ[ cascade ]; |
| 34298 | |
| 34299 | pointsFrustum[ 0 ].set( -1, -1, nearZ ); |
| 34300 | pointsFrustum[ 1 ].set( 1, -1, nearZ ); |
| 34301 | pointsFrustum[ 2 ].set( -1, 1, nearZ ); |
| 34302 | pointsFrustum[ 3 ].set( 1, 1, nearZ ); |
| 34303 | |
| 34304 | pointsFrustum[ 4 ].set( -1, -1, farZ ); |
| 34305 | pointsFrustum[ 5 ].set( 1, -1, farZ ); |
| 34306 | pointsFrustum[ 6 ].set( -1, 1, farZ ); |
| 34307 | pointsFrustum[ 7 ].set( 1, 1, farZ ); |
| 34308 | |
| 34309 | return virtualLight; |
| 34310 | |
| 34311 | } |
| 34312 | |
| 34313 | // Synchronize virtual light with the original light |
| 34314 | |