Преобразование системы координат для модели FBX в OpenGL
Я загружаю модели FBX с помощью Autodesk FBX SDK2013.Модели по умолчанию поворачиваются на 90 градусов по оси X.
SDK предоставляет этот метод:
FbxAxisSystem::OpenGL.ConvertScene(scene);
Для выполнения преобразования оси.Но это не работает.Вызов его ничего не меняет.Более того, похоже, что экспортер FBX по умолчанию использует OpenGL right hand sytem,по крайней мере, так он говорит при импорте:
FbxAxisSystem fbxAxis = scene->GetGlobalSettings().GetAxisSystem();
if (fbxAxis != FbxAxisSystem::OpenGL)
{
//....
}
Возвращает false.
Так что я не понимаю;если это OpenGL (правая рука системы, почему модели имеют ось Z как вверх?
Это ошибка SDK?
1 ответ:
Я наконец нашел решение.Кто-то здесь фактически сказал, что 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 forum не слишком отзывчив.
Comments