|
@@ -1873,7 +1873,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
if ( _lightsNeedUpdate ) {
|
|
|
|
|
|
refreshLights = true;
|
|
|
- setupLights( lights );
|
|
|
+ setupLights( lights, camera );
|
|
|
_lightsNeedUpdate = false;
|
|
|
|
|
|
}
|
|
@@ -2585,7 +2585,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- function setupLights ( lights ) {
|
|
|
+ function setupLights ( lights, camera ) {
|
|
|
|
|
|
var l, ll, light,
|
|
|
r = 0, g = 0, b = 0,
|
|
@@ -2595,6 +2595,8 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
zlights = _lights,
|
|
|
|
|
|
+ viewMatrix = camera.matrixWorldInverse,
|
|
|
+
|
|
|
dirColors = zlights.directional.colors,
|
|
|
dirPositions = zlights.directional.positions,
|
|
|
|
|
@@ -2657,7 +2659,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
_direction.setFromMatrixPosition( light.matrixWorld );
|
|
|
_vector3.setFromMatrixPosition( light.target.matrixWorld );
|
|
|
_direction.sub( _vector3 );
|
|
|
- _direction.normalize();
|
|
|
+ _direction.transformDirection( viewMatrix );
|
|
|
|
|
|
dirOffset = dirLength * 3;
|
|
|
|
|
@@ -2680,6 +2682,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
setColorLinear( pointColors, pointOffset, color, intensity );
|
|
|
|
|
|
_vector3.setFromMatrixPosition( light.matrixWorld );
|
|
|
+ _vector3.applyMatrix4( viewMatrix );
|
|
|
|
|
|
pointPositions[ pointOffset + 0 ] = _vector3.x;
|
|
|
pointPositions[ pointOffset + 1 ] = _vector3.y;
|
|
@@ -2702,16 +2705,17 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
setColorLinear( spotColors, spotOffset, color, intensity );
|
|
|
|
|
|
_direction.setFromMatrixPosition( light.matrixWorld );
|
|
|
+ _vector3.copy( _direction ).applyMatrix4( viewMatrix );
|
|
|
|
|
|
- spotPositions[ spotOffset + 0 ] = _direction.x;
|
|
|
- spotPositions[ spotOffset + 1 ] = _direction.y;
|
|
|
- spotPositions[ spotOffset + 2 ] = _direction.z;
|
|
|
+ spotPositions[ spotOffset + 0 ] = _vector3.x;
|
|
|
+ spotPositions[ spotOffset + 1 ] = _vector3.y;
|
|
|
+ spotPositions[ spotOffset + 2 ] = _vector3.z;
|
|
|
|
|
|
spotDistances[ spotLength ] = distance;
|
|
|
|
|
|
_vector3.setFromMatrixPosition( light.target.matrixWorld );
|
|
|
_direction.sub( _vector3 );
|
|
|
- _direction.normalize();
|
|
|
+ _direction.transformDirection( viewMatrix );
|
|
|
|
|
|
spotDirections[ spotOffset + 0 ] = _direction.x;
|
|
|
spotDirections[ spotOffset + 1 ] = _direction.y;
|
|
@@ -2730,7 +2734,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
if ( ! light.visible ) continue;
|
|
|
|
|
|
_direction.setFromMatrixPosition( light.matrixWorld );
|
|
|
- _direction.normalize();
|
|
|
+ _direction.transformDirection( viewMatrix );
|
|
|
|
|
|
hemiOffset = hemiLength * 3;
|
|
|
|