瀏覽代碼

Merge pull request #17325 from supereggbert/lightshadow

Fix over looked shadow use case in refactor
Mr.doob 6 年之前
父節點
當前提交
9252217b53
共有 3 個文件被更改,包括 12 次插入23 次删除
  1. 0 11
      src/lights/DirectionalLightShadow.js
  2. 11 2
      src/lights/LightShadow.js
  3. 1 10
      src/lights/SpotLightShadow.js

+ 0 - 11
src/lights/DirectionalLightShadow.js

@@ -19,17 +19,6 @@ DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.pro
 
 	updateMatrices: function ( light, viewCamera, viewportIndex ) {
 
-		var camera = this.camera,
-			lightPositionWorld = this._lightPositionWorld,
-			lookTarget = this._lookTarget;
-
-		lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
-		camera.position.copy( lightPositionWorld );
-
-		lookTarget.setFromMatrixPosition( light.target.matrixWorld );
-		camera.lookAt( lookTarget );
-		camera.updateMatrixWorld();
-
 		LightShadow.prototype.updateMatrices.call( this, light, viewCamera, viewportIndex );
 
 	}

+ 11 - 2
src/lights/LightShadow.js

@@ -53,11 +53,20 @@ Object.assign( LightShadow.prototype, {
 
 	},
 
-	updateMatrices: function () {
+	updateMatrices: function ( light ) {
 
 		var shadowCamera = this.camera,
 			shadowMatrix = this.matrix,
-			projScreenMatrix = this._projScreenMatrix;
+			projScreenMatrix = this._projScreenMatrix,
+			lookTarget = this._lookTarget,
+			lightPositionWorld = this._lightPositionWorld;
+
+		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.setFromMatrix( projScreenMatrix );

+ 1 - 10
src/lights/SpotLightShadow.js

@@ -20,9 +20,7 @@ SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype
 
 	updateMatrices: function ( light, viewCamera, viewportIndex ) {
 
-		var camera = this.camera,
-			lookTarget = this._lookTarget,
-			lightPositionWorld = this._lightPositionWorld;
+		var camera = this.camera;
 
 		var fov = _Math.RAD2DEG * 2 * light.angle;
 		var aspect = this.mapSize.width / this.mapSize.height;
@@ -37,13 +35,6 @@ SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype
 
 		}
 
-		lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
-		camera.position.copy( lightPositionWorld );
-
-		lookTarget.setFromMatrixPosition( light.target.matrixWorld );
-		camera.lookAt( lookTarget );
-		camera.updateMatrixWorld();
-
 		LightShadow.prototype.updateMatrices.call( this, light, viewCamera, viewportIndex );
 
 	}