Bläddra i källkod

Matrix3: Let getNormalMatrix use new setFromMatrix4.

- Also linearize memory access in set.
tschw 9 år sedan
förälder
incheckning
4a34b12aed
1 ändrade filer med 21 tillägg och 31 borttagningar
  1. 21 31
      src/math/Matrix3.js

+ 21 - 31
src/math/Matrix3.js

@@ -31,9 +31,9 @@ THREE.Matrix3.prototype = {
 
 		var te = this.elements;
 
-		te[ 0 ] = n11; te[ 3 ] = n12; te[ 6 ] = n13;
-		te[ 1 ] = n21; te[ 4 ] = n22; te[ 7 ] = n23;
-		te[ 2 ] = n31; te[ 5 ] = n32; te[ 8 ] = n33;
+		te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;
+		te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;
+		te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;
 
 		return this;
 
@@ -75,6 +75,22 @@ THREE.Matrix3.prototype = {
 
 	},
 
+	setFromMatrix4: function( m ) {
+
+		var me = m.elements;
+
+		this.set(
+
+			me[ 0 ], me[ 4 ], me[  8 ],
+			me[ 1 ], me[ 5 ], me[  9 ],
+			me[ 2 ], me[ 6 ], me[ 10 ]
+
+		);
+
+		return this;
+
+	},
+
 	applyToVector3Array: function () {
 
 		var v1;
@@ -237,35 +253,9 @@ THREE.Matrix3.prototype = {
 
 	},
 
-	getNormalMatrix: function ( matrix ) {
-
-		// input: THREE.Matrix4
-		// ( based on http://code.google.com/p/webgl-mjs/ )
-
-		var me = matrix.elements;
-		var te = this.elements;
-
-		te[ 0 ] =	me[ 10 ] * me[ 5 ] - me[ 6 ] * me[ 9 ];
-		te[ 1 ] = - me[ 10 ] * me[ 1 ] + me[ 2 ] * me[ 9 ];
-		te[ 2 ] =	me[ 6 ] * me[ 1 ] - me[ 2 ] * me[ 5 ];
-		te[ 3 ] = - me[ 10 ] * me[ 4 ] + me[ 6 ] * me[ 8 ];
-		te[ 4 ] =	me[ 10 ] * me[ 0 ] - me[ 2 ] * me[ 8 ];
-		te[ 5 ] = - me[ 6 ] * me[ 0 ] + me[ 2 ] * me[ 4 ];
-		te[ 6 ] =	me[ 9 ] * me[ 4 ] - me[ 5 ] * me[ 8 ];
-		te[ 7 ] = - me[ 9 ] * me[ 0 ] + me[ 1 ] * me[ 8 ];
-		te[ 8 ] =	me[ 5 ] * me[ 0 ] - me[ 1 ] * me[ 4 ];
-
-		var det = me[ 0 ] * te[ 0 ] + me[ 1 ] * te[ 3 ] + me[ 2 ] * te[ 6 ];
-
-		if ( det === 0 ) {
-
-			console.warn(
-					"THREE.Matrix3.getNormalMatrix(): can't invert matrix, determinant is 0" );
-			return this.identity();
-
-		}
+	getNormalMatrix: function ( matrix4 ) {
 
-		return this.multiplyScalar( 1.0 / det ).transpose();
+		return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();
 
 	},