From 4a34b12aed63b509dc9caa5564982876d129aa31 Mon Sep 17 00:00:00 2001 From: tschw Date: Fri, 26 Feb 2016 23:22:55 +0100 Subject: [PATCH] Matrix3: Let getNormalMatrix use new setFromMatrix4. - Also linearize memory access in set. --- src/math/Matrix3.js | 52 ++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/src/math/Matrix3.js b/src/math/Matrix3.js index 91944e9a91..17743bb94a 100644 --- a/src/math/Matrix3.js +++ b/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(); }, -- GitLab