3

我使用 Autodesk FBX SDK2013 加载 FBX 模型。默认情况下,模型在 X 轴上旋转 90 度。

SDK 提供此方法:

FbxAxisSystem::OpenGL.ConvertScene(scene);

执行轴转换。但它不起作用。调用它不会改变任何事情。此外,FBX 导出器似乎默认使用 OpenGL 右手系统,至少在导入时是这样说的:

     FbxAxisSystem fbxAxis = scene->GetGlobalSettings().GetAxisSystem();

            if (fbxAxis != FbxAxisSystem::OpenGL)
            {
                      //....
            }

返回假。所以我不明白;如果是OpenGL(右手系统,为什么模型的Z轴向上?是SDK错误吗?

4

1 回答 1

4

我终于找到了解决方案。这里有人实际上说 ConvertScene() 不会影响顶点数组,而是设置节点全局/局部矩阵。有了这些,我们就可以转换节点几何或顶点。

所以这里是如何完成的:

    FbxMatrix globalTransform = mesh->GetNode()->GetScene()->GetEvaluator()->GetNodeGlobalTransform( mesh->GetNode());
dvec4 c0 =  glm::make_vec4((double*)  globalTransform.GetColumn(0).Buffer());
dvec4 c1 =  glm::make_vec4((double*) globalTransform.GetColumn(1).Buffer());
dvec4 c2 =  glm::make_vec4((double*) globalTransform.GetColumn(2).Buffer());
dvec4 c3 =  glm::make_vec4((double*) globalTransform.GetColumn(3).Buffer());
glm::mat4 convertMatr =mat4(c0,c1,c2,c3);
convertMatr = inverse(convertMatr); //need to inverse otherwise the model is upside down

然后使用 convertMatr 来转换网格的顶点。希望它对任何人都有帮助,因为 Autodesk 论坛没有太多响应。

于 2013-08-10T11:46:24.203 回答