2013-08-09 2 views
2

Autodesk FBX SDK2013을 사용하여 FBX 모델을로드합니다. 모델은 기본적으로 X 축에서 90도 회전합니다.OpenGL에서 FBX 모델의 좌표계 변환

이 SDK 공급이 방법 :

FbxAxisSystem::OpenGL.ConvertScene(scene); 

이는 FBX 수출 기본적으로 OpenGL을 오른쪽 재부를 사용하는 것, 축 그것이 nothing.Moreover 변경 work.Calling하지 않습니다 conversion.But 수행 할 수있는, 적어도 그게 수입에 말씀입니다 :

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

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

false를 반환합니다. 그래서 내가 이해하지 않는다? 그것은 까지 그에게 SDK의 버그로 모델 Z 축 이유 (오른 손잡이 시스템, OpenGL을 경우

+0

손으로 찍은 축은 상향 축의 방향과 아무런 관련이 없습니다. 또한, "업"은 장면을 보는 방법에 따라 다릅니다. –

+0

내 장면에서 Y는 위로 움직입니다. -Z가 앞으로옵니다. 가져온 모델의 Y (3dsMax에서 Z)는 내 Z와 정렬됩니다. –

+0

"가져온 모델의 Y Z는 3dsMax에서 Z)는 내 Z *와 정렬됩니다. "Max에서"Z "라고 말합니다. FBX 파일을 "Z"로 응용 프로그램에 적용한 후에 나타납니다. 그리고 이것은 ... 잘못입니까? 모델이 Max에서 잘못 배치 된 것 같습니다. –

답변

3

내가 마지막으로 발견 된 solution.Someone here 실제로 말했다 그 ConvertScene()이 우리가 다음 노드 구조 또는 정점을 변환 할 수있는 정점 배열에 영향을 미칠하지만 노드 글로벌/로컬 matrices.With을 설정하지 않는

을 그래서 여기가 수행하는 방법 :.

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 foru와 같이 누구에게나 도움이되기를 바랍니다. m은 너무 반응이 많지 않습니다.