我以SEA3D格式从3ds max导出了装配的角色
在Three.js中加载
骨旋转具有初始值。当我将这些XYZ值设置为0,0,0时,我的模型看起来完全混乱了


来自搅拌器的模型骨骼的初始值均为0、0、0



我已经尝试过首先将模型导出为FBX格式,在Blender中导入,然后导出为JSON格式。有效!不幸的是,这带来了其他问题,并且步骤太多。 Sea3d格式也比JSON小得多,我在整个项目中都成功使用了这种格式。

我也尝试使用SEA3D Studio http://sea3d.poonya.com/studio/将每个骨骼的“逆绑定矩阵”旋转设置为0、0、0,这有助于初始位置,但对轴顺序没有帮助。

如果我对矩阵的了解超过0,我将制作一个脚本,该脚本将在加载时重置每个模型,但这是我需要帮助的,或者需要有关从3ds max导出的帮助,因此初始旋转值为0,并且轴的顺序正确

最佳答案

经过无数次尝试和错误实验以中断设置骨骼的初始旋转值后,我发现在SEA3D加载器中编辑此代码段即可完成工作。

THREE.SEA3D.prototype.flipMatrix = function(mtx) {
    var mtx_data = THREE.SEA3D.BUFFER0.copy( mtx );

    mtx.setPosition( THREE.SEA3D.VECZERO );
    mtx.multiplyMatrices( THREE.SEA3D.BUFFER1.makeRotationAxis( THREE.SEA3D.VECBUF0.set(0, 0, 1), THREE.Math.degToRad( 180 ) ), mtx );
    mtx.makeRotationFromQuaternion( THREE.SEA3D.QUABUF0.setFromRotationMatrix( mtx ) );

    var pos = THREE.SEA3D.VECBUF0.setFromMatrixPosition( mtx_data );
    pos.z = -pos.z;
    mtx.setPosition(pos);

    return mtx;
}


正是这一行:

mtx.makeRotationFromQuaternion( THREE.SEA3D.QUABUF0.setFromRotationMatrix( mtx ) );


应该更改为:

mtx.makeRotationFromQuaternion( new THREE.Quaternion(0, 0, 0, 1) );


这不是解决方案,而是一种解决方法,因此,如果您有真正的解决方案(如何从3ds max正确导出它或在加载后对其进行处理),请不要犹豫将其发布!

关于javascript - Three.js从3ds Max导入带有骨架的 Angular 色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30928803/

10-09 18:03