diff --git a/examples/js/loaders/FBXLoader.js b/examples/js/loaders/FBXLoader.js index 9da8f0590f68226a6fc84d32e2ca4a4080c92ea1..acdc31188dd212d6ed6b880bab6b9581328ec085 100644 --- a/examples/js/loaders/FBXLoader.js +++ b/examples/js/loaders/FBXLoader.js @@ -3986,43 +3986,51 @@ THREE.FBXLoader = ( function () { // Global Shear*Scaling var lParentTM = new THREE.Matrix4(); - var lLSM; - var lParentGSM; - var lParentGRSM; + var lLSM = new Matrix4(); + var lParentGSM = new Matrix4(); + var lParentGRSM = new Matrix4(); + + var lParentTM_inv = new Matrix4().getInverse( lParentTM ); lParentTM.copyPosition( lParentGX ); - lParentGRSM = lParentTM.getInverse( lParentTM ).multiply( lParentGX ); - lParentGSM = lParentGRM.getInverse( lParentGRM ).multiply( lParentGRSM ); + lParentGRSM.multiply( lParentTM_inv ).multiply( lParentGX ); + + var lParentGRM_inv = new Matrix4().getInverse( lParentGRM ); + lParentGSM.multiply( lParentGRM_inv ).multiply( lParentGRSM ); lLSM = lScalingM; - var lGlobalRS; + var lGlobalRS = new Matrix4(); if ( inheritType === 0 ) { - lGlobalRS = lParentGRM.multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM ); + lGlobalRS.multiply( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM ); } else if ( inheritType === 1 ) { - lGlobalRS = lParentGRM.multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM ); + lGlobalRS.multiply( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM ); } else { var lParentLSM = new THREE.Matrix4().copy( lScalingM ); - var lParentGSM_noLocal = lParentGSM.multiply( lParentLSM.getInverse( lParentLSM ) ); + var lParentLSM_inv = new Matrix4().getInverse( lParentLSM ); + var lParentGSM_noLocal = new Matrix4().multiply( lParentGSM ).multiply( lParentLSM_inv ); - lGlobalRS = lParentGRM.multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM ); + lGlobalRS.multiply( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM ); } + var lRotationPivotM_inv = new Matrix4().getInverse( lRotationPivotM ); + var lScalingPivotM_inv = new Matrix4().getInverse( lScalingPivotM ); // Calculate the local transform matrix - var lTransform = lTranslationM.multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM.getInverse( lRotationPivotM ) ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM.getInverse( lScalingPivotM ) ); + var lTransform = new Matrix4(); + lTransform.multiply( lTranslationM ).multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv ); var lLocalTWithAllPivotAndOffsetInfo = new THREE.Matrix4().copyPosition( lTransform ); - var lGlobalTranslation = lParentGX.multiply( lLocalTWithAllPivotAndOffsetInfo ); + var lGlobalTranslation = new Matrix4().multiply(lParentGX).multiply( lLocalTWithAllPivotAndOffsetInfo ); lGlobalT.copyPosition( lGlobalTranslation ); - lTransform = lGlobalT.multiply( lGlobalRS ); + lTransform = new Matrix4().multiply(lGlobalT).multiply( lGlobalRS ); return lTransform; diff --git a/examples/jsm/loaders/FBXLoader.js b/examples/jsm/loaders/FBXLoader.js index c1b058d012c4f24c3f1594695ccb14dfbe2ed6e4..5b0bff7b198316befb0df45e8e5dc1dc39d35260 100644 --- a/examples/jsm/loaders/FBXLoader.js +++ b/examples/jsm/loaders/FBXLoader.js @@ -4033,43 +4033,51 @@ var FBXLoader = ( function () { // Global Shear*Scaling var lParentTM = new Matrix4(); - var lLSM; - var lParentGSM; - var lParentGRSM; + var lLSM = new Matrix4(); + var lParentGSM = new Matrix4(); + var lParentGRSM = new Matrix4(); + + var lParentTM_inv = new Matrix4().getInverse( lParentTM ); lParentTM.copyPosition( lParentGX ); - lParentGRSM = lParentTM.getInverse( lParentTM ).multiply( lParentGX ); - lParentGSM = lParentGRM.getInverse( lParentGRM ).multiply( lParentGRSM ); + lParentGRSM.multiply( lParentTM_inv ).multiply( lParentGX ); + + var lParentGRM_inv = new Matrix4().getInverse( lParentGRM ); + lParentGSM.multiply( lParentGRM_inv ).multiply( lParentGRSM ); lLSM = lScalingM; - var lGlobalRS; + var lGlobalRS = new Matrix4(); if ( inheritType === 0 ) { - lGlobalRS = lParentGRM.multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM ); + lGlobalRS.multiply( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM ); } else if ( inheritType === 1 ) { - lGlobalRS = lParentGRM.multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM ); + lGlobalRS.multiply( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM ); } else { var lParentLSM = new Matrix4().copy( lScalingM ); - var lParentGSM_noLocal = lParentGSM.multiply( lParentLSM.getInverse( lParentLSM ) ); + var lParentLSM_inv = new Matrix4().getInverse( lParentLSM ); + var lParentGSM_noLocal = new Matrix4().multiply( lParentGSM ).multiply( lParentLSM_inv ); - lGlobalRS = lParentGRM.multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM ); + lGlobalRS.multiply( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM ); } + var lRotationPivotM_inv = new Matrix4().getInverse( lRotationPivotM ); + var lScalingPivotM_inv = new Matrix4().getInverse( lScalingPivotM ); // Calculate the local transform matrix - var lTransform = lTranslationM.multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM.getInverse( lRotationPivotM ) ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM.getInverse( lScalingPivotM ) ); + var lTransform = new Matrix4(); + lTransform.multiply( lTranslationM ).multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv ); var lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform ); - var lGlobalTranslation = lParentGX.multiply( lLocalTWithAllPivotAndOffsetInfo ); + var lGlobalTranslation = new Matrix4().multiply(lParentGX).multiply( lLocalTWithAllPivotAndOffsetInfo ); lGlobalT.copyPosition( lGlobalTranslation ); - lTransform = lGlobalT.multiply( lGlobalRS ); + lTransform = new Matrix4().multiply(lGlobalT).multiply( lGlobalRS ); return lTransform;