Autodesk FBX SDK导入3ds Max导出FBX的向上轴向异常问题
FBX SDK导入3ds Max导出FBX文件时轴向转换失效问题
我在使用Autodesk SDK在3D应用中导入FBX文件时遇到了一些问题。当我从3ds Max导出网格,并在导出器选项中选择Y作为向上轴向时,顶点没有被转换,文件中点坐标仍然使用Z轴作为向上轴向。这是符合预期的,因为我需要后续将场景转换到我定义的轴向系统。在导入器代码中,我校验了轴向系统,并将场景转换为Y轴向上的系统:
FbxAxisSystem axisSystem(FbxAxisSystem::eYAxis, FbxAxisSystem::eParityOdd, FbxAxisSystem::eRightHanded); FbxAxisSystem sceneAxisSystem = fbxScene->GetGlobalSettings().GetAxisSystem(); if (sceneAxisSystem != axisSystem) axisSystem.ConvertScene(fbxScene);
但是,导出的文件已经与我使用的轴向系统一致(向上轴为Y),所以没有发生转换。如果我从Blender或Maya导出相同的网格,轴向系统也是相同的。3ds Max导出的文件中唯一不同的属性是OriginalUpAxis属性,其值为2(Z),而Maya导出的该属性值为1。我尝试以Z为向上轴向导出网格,顶点位置与之前相同,这次场景转换被触发(至少if语句执行了),但当我尝试转换顶点位置时,得到的是单位矩阵,这让我认为axisSystem.ConvertScene(fbxScene)没有执行任何操作:
FbxMesh *fbxMesh = meshNode->GetMesh(); FbxAMatrix& transform = meshNode->EvaluateGlobalTransform(); unsigned numFbxVertices = fbxMesh->GetControlPointsCount(); FbxVector4* lControlPoints = fbxMesh->GetControlPoints(); /*此处获取到的是单位矩阵 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 */ std::cout << transform.GetColumn(0).Buffer()[0] << transform.GetColumn(0).Buffer()[1] << transform.GetColumn(0).Buffer()[2] << transform.GetColumn(0).Buffer()[3] << std::endl; std::cout << transform.GetColumn(1).Buffer()[0] << transform.GetColumn(1).Buffer()[1] << transform.GetColumn(1).Buffer()[2] << transform.GetColumn(1).Buffer()[3] << std::endl; std::cout << transform.GetColumn(2).Buffer()[0] << transform.GetColumn(2).Buffer()[1] << transform.GetColumn(2).Buffer()[2] << transform.GetColumn(2).Buffer()[3] << std::endl; std::cout << transform.GetColumn(3).Buffer()[0] << transform.GetColumn(3).Buffer()[1] << transform.GetColumn(3).Buffer()[2] << transform.GetColumn(3).Buffer()[3] << std::endl;
请问这是SDK的bug吗?有没有解决建议?
问题解决
问题已解决,对场景中每个节点执行node->ResetPivotSetAndConvertAnimation()会同时重置变换矩阵,这就是问题的根源,现在运行完全正常。
内容的提问来源于stack exchange,提问作者Teo More
相关产品推荐
相关产品推荐

