未验证 提交 6cd829fb 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #19093 from crest01/dev

Bugfix at matrix calculation at FBX import
...@@ -3986,43 +3986,51 @@ THREE.FBXLoader = ( function () { ...@@ -3986,43 +3986,51 @@ THREE.FBXLoader = ( function () {
// Global Shear*Scaling // Global Shear*Scaling
var lParentTM = new THREE.Matrix4(); var lParentTM = new THREE.Matrix4();
var lLSM; var lLSM = new Matrix4();
var lParentGSM; var lParentGSM = new Matrix4();
var lParentGRSM; var lParentGRSM = new Matrix4();
var lParentTM_inv = new Matrix4().getInverse( lParentTM );
lParentTM.copyPosition( lParentGX ); lParentTM.copyPosition( lParentGX );
lParentGRSM = lParentTM.getInverse( lParentTM ).multiply( lParentGX ); lParentGRSM.multiply( lParentTM_inv ).multiply( lParentGX );
lParentGSM = lParentGRM.getInverse( lParentGRM ).multiply( lParentGRSM );
var lParentGRM_inv = new Matrix4().getInverse( lParentGRM );
lParentGSM.multiply( lParentGRM_inv ).multiply( lParentGRSM );
lLSM = lScalingM; lLSM = lScalingM;
var lGlobalRS; var lGlobalRS = new Matrix4();
if ( inheritType === 0 ) { if ( inheritType === 0 ) {
lGlobalRS = lParentGRM.multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM ); lGlobalRS.multiply( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM );
} else if ( inheritType === 1 ) { } else if ( inheritType === 1 ) {
lGlobalRS = lParentGRM.multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM ); lGlobalRS.multiply( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM );
} else { } else {
var lParentLSM = new THREE.Matrix4().copy( lScalingM ); 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 // 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 lLocalTWithAllPivotAndOffsetInfo = new THREE.Matrix4().copyPosition( lTransform );
var lGlobalTranslation = lParentGX.multiply( lLocalTWithAllPivotAndOffsetInfo ); var lGlobalTranslation = new Matrix4().multiply(lParentGX).multiply( lLocalTWithAllPivotAndOffsetInfo );
lGlobalT.copyPosition( lGlobalTranslation ); lGlobalT.copyPosition( lGlobalTranslation );
lTransform = lGlobalT.multiply( lGlobalRS ); lTransform = new Matrix4().multiply(lGlobalT).multiply( lGlobalRS );
return lTransform; return lTransform;
......
...@@ -4033,43 +4033,51 @@ var FBXLoader = ( function () { ...@@ -4033,43 +4033,51 @@ var FBXLoader = ( function () {
// Global Shear*Scaling // Global Shear*Scaling
var lParentTM = new Matrix4(); var lParentTM = new Matrix4();
var lLSM; var lLSM = new Matrix4();
var lParentGSM; var lParentGSM = new Matrix4();
var lParentGRSM; var lParentGRSM = new Matrix4();
var lParentTM_inv = new Matrix4().getInverse( lParentTM );
lParentTM.copyPosition( lParentGX ); lParentTM.copyPosition( lParentGX );
lParentGRSM = lParentTM.getInverse( lParentTM ).multiply( lParentGX ); lParentGRSM.multiply( lParentTM_inv ).multiply( lParentGX );
lParentGSM = lParentGRM.getInverse( lParentGRM ).multiply( lParentGRSM );
var lParentGRM_inv = new Matrix4().getInverse( lParentGRM );
lParentGSM.multiply( lParentGRM_inv ).multiply( lParentGRSM );
lLSM = lScalingM; lLSM = lScalingM;
var lGlobalRS; var lGlobalRS = new Matrix4();
if ( inheritType === 0 ) { if ( inheritType === 0 ) {
lGlobalRS = lParentGRM.multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM ); lGlobalRS.multiply( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM );
} else if ( inheritType === 1 ) { } else if ( inheritType === 1 ) {
lGlobalRS = lParentGRM.multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM ); lGlobalRS.multiply( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM );
} else { } else {
var lParentLSM = new Matrix4().copy( lScalingM ); 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 // 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 lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform );
var lGlobalTranslation = lParentGX.multiply( lLocalTWithAllPivotAndOffsetInfo ); var lGlobalTranslation = new Matrix4().multiply(lParentGX).multiply( lLocalTWithAllPivotAndOffsetInfo );
lGlobalT.copyPosition( lGlobalTranslation ); lGlobalT.copyPosition( lGlobalTranslation );
lTransform = lGlobalT.multiply( lGlobalRS ); lTransform = new Matrix4().multiply(lGlobalT).multiply( lGlobalRS );
return lTransform; return lTransform;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册