提交 748159e4 编写于 作者: A alteredq

Transplanted @WestLangley's normal matrix fix from Geometry.applyMatrix to BufferGeometry.

See #2610
上级 42104287
......@@ -1565,6 +1565,28 @@ THREE.Matrix3.prototype = {
},
multiplyVector3Array: function ( a ) {
var tmp = THREE.Matrix3.__v1;
for ( var i = 0, il = a.length; i < il; i += 3 ) {
tmp.x = a[ i ];
tmp.y = a[ i + 1 ];
tmp.z = a[ i + 2 ];
this.multiplyVector3( tmp );
a[ i ] = tmp.x;
a[ i + 1 ] = tmp.y;
a[ i + 2 ] = tmp.z;
}
return a;
},
getInverse: function ( matrix ) {
// input: THREE.Matrix4
......@@ -1637,7 +1659,8 @@ THREE.Matrix3.prototype = {
}
};
/**
THREE.Matrix3.__v1 = new THREE.Vector3();/**
* @author mrdoob / http://mrdoob.com/
* @author supereggbert / http://www.paulbrunt.co.uk/
* @author philogb / http://blog.thejit.org/
......@@ -5714,10 +5737,13 @@ THREE.BufferGeometry.prototype = {
if ( normalArray !== undefined ) {
var matrixRotation = new THREE.Matrix4();
matrixRotation.extractRotation( matrix );
var normalMatrix = new THREE.Matrix3();
normalMatrix.getInverse( matrix ).transpose();
normalMatrix.multiplyVector3Array( normalArray );
this.normalizeNormals();
matrixRotation.multiplyVector3Array( normalArray );
this.normalsNeedUpdate = true;
}
......@@ -5916,15 +5942,27 @@ THREE.BufferGeometry.prototype = {
}
// normalize normals
this.normalizeNormals();
this.normalsNeedUpdate = true;
}
},
normalizeNormals: function () {
var normals = this.attributes[ "normal" ].array;
var x, y, z, n;
for ( i = 0, il = normals.length; i < il; i += 3 ) {
for ( var i = 0, il = normals.length; i < il; i += 3 ) {
x = normals[ i ];
y = normals[ i + 1 ];
z = normals[ i + 2 ];
var n = 1.0 / Math.sqrt( x * x + y * y + z * z );
n = 1.0 / Math.sqrt( x * x + y * y + z * z );
normals[ i ] *= n;
normals[ i + 1 ] *= n;
......@@ -5932,10 +5970,6 @@ THREE.BufferGeometry.prototype = {
}
this.normalsNeedUpdate = true;
}
},
computeTangents: function () {
......
此差异已折叠。
......@@ -50,10 +50,13 @@ THREE.BufferGeometry.prototype = {
if ( normalArray !== undefined ) {
var matrixRotation = new THREE.Matrix4();
matrixRotation.extractRotation( matrix );
var normalMatrix = new THREE.Matrix3();
normalMatrix.getInverse( matrix ).transpose();
normalMatrix.multiplyVector3Array( normalArray );
this.normalizeNormals();
matrixRotation.multiplyVector3Array( normalArray );
this.normalsNeedUpdate = true;
}
......@@ -252,15 +255,27 @@ THREE.BufferGeometry.prototype = {
}
// normalize normals
this.normalizeNormals();
this.normalsNeedUpdate = true;
}
},
normalizeNormals: function () {
var normals = this.attributes[ "normal" ].array;
var x, y, z, n;
for ( i = 0, il = normals.length; i < il; i += 3 ) {
for ( var i = 0, il = normals.length; i < il; i += 3 ) {
x = normals[ i ];
y = normals[ i + 1 ];
z = normals[ i + 2 ];
var n = 1.0 / Math.sqrt( x * x + y * y + z * z );
n = 1.0 / Math.sqrt( x * x + y * y + z * z );
normals[ i ] *= n;
normals[ i + 1 ] *= n;
......@@ -268,10 +283,6 @@ THREE.BufferGeometry.prototype = {
}
this.normalsNeedUpdate = true;
}
},
computeTangents: function () {
......
......@@ -27,6 +27,28 @@ THREE.Matrix3.prototype = {
},
multiplyVector3Array: function ( a ) {
var tmp = THREE.Matrix3.__v1;
for ( var i = 0, il = a.length; i < il; i += 3 ) {
tmp.x = a[ i ];
tmp.y = a[ i + 1 ];
tmp.z = a[ i + 2 ];
this.multiplyVector3( tmp );
a[ i ] = tmp.x;
a[ i + 1 ] = tmp.y;
a[ i + 2 ] = tmp.z;
}
return a;
},
getInverse: function ( matrix ) {
// input: THREE.Matrix4
......@@ -99,3 +121,5 @@ THREE.Matrix3.prototype = {
}
};
THREE.Matrix3.__v1 = new THREE.Vector3();
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册