首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Three.js从3DSmax导入一个具有骨架的字符

Three.js从3DSmax导入一个具有骨架的字符
EN

Stack Overflow用户
提问于 2015-06-19 02:07:18
回答 1查看 884关注 0票数 1
  1. 我以SEA3D格式从3ds max导出了一个被操纵的字符
  2. 加载在Three.js中
  3. 骨旋转有初始值。当我将这些XYZ值设置为0,0,0时,我的模型看起来完全混乱。

搅拌机的模型骨头都有0,0,0的初始值。

我已经尝试过先将模型导出为FBX格式,然后在搅拌器中导入,然后导出为JSON格式。啊,真灵!不幸的是,这造成了其他问题和太多的步骤要遵循。而且,Sea3d格式比JSON小得多,我在整个项目中成功地使用了这种格式。

另外,我尝试使用SEA3D Studio http://sea3d.poonya.com/studio/将“逆绑定矩阵”的旋转设置为0,0,0,对于每个骨头,这有助于初始位置,但不符合轴序。

如果我对矩阵的了解超过0,我会创建一个脚本,它会在加载时重置每个模型,但这是我需要帮助或帮助导出的,从3ds最大值导出,所以初始旋转值为0,轴的顺序是正确的

EN

回答 1

Stack Overflow用户

发布于 2015-06-19 06:11:05

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

代码语言:javascript
运行
复制
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;
}

准确地说,这一行:

代码语言:javascript
运行
复制
mtx.makeRotationFromQuaternion( THREE.SEA3D.QUABUF0.setFromRotationMatrix( mtx ) ); 

应改为:

代码语言:javascript
运行
复制
mtx.makeRotationFromQuaternion( new THREE.Quaternion(0, 0, 0, 1) ); 

这不是一个解决方案,而是一个解决方案,所以如果你有一个真正的解决方案(如何正确地从3ds max导出它或在加载后处理它),那么不要犹豫发布它!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30928803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档