我使用Autodesk FBX SDK2013加载FBX模型。默认情况下,模型在X轴上旋转90度。
SDK提供此方法:
FbxAxisSystem::OpenGL.ConvertScene(scene);
执行轴转换。但它不起作用。调用它什么也没有改变。此外,似乎FBX导出器默认使用OpenGL右手系统,至少就是导入时所说的那样:
FbxAxisSystem fbxAxis = scene->GetGlobalSettings().GetAxisSystem();
if (fbxAxis != FbxAxisSystem::OpenGL)
{
//....
}
返回false。 所以我不明白;如果是OpenGL(右手系统,为什么模型的Z轴为何? 它是SDK的错误吗?
答案 0 :(得分:3)
我终于找到了解决方案。有人here实际上说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论坛没有太多响应。