개발 노트 FBX 로딩 (1) 2015/07/22 12:58 by cagetu

FBX 로딩 작업을 하는데, 특별히 자료가 많지 않아서.. (당연하지 이걸 누가해.. ;;;;) 그냥 작업하면서 정리볼 생각입니다.

모든 내용은 FBX 프로그래머 가이드를 참고하면 되네요.

참고자료

딱히 별도로 정리하기 귀찮으니 코드를 연습장으로 (파워) 정리... 

전체적은 흐름은 FbxScene을 하나 만들고, File 에서 FbxScene으로 임포트하는 과정입니다.

        // 메모리 관리를 위한 SDK 관리자
       g_fbxSdkManager = FbxManager ::Create();
        if (g_fbxSdkManager == NULL)
              return false;

        /*     Import Option
             - import file안에 저장된 모든 데이터 타입이나 특정 데이터 타입을 FBX Scene으로 임포트할 수 있다.
             - import option을 통해서, 카메라, 라이트, 애니메이션을 임포트할 것인지 아닌지를 선택할 수 있다.
             - Import Option은 IOSetting 객체로 설정한다.
             - Import Option의 기본값은 true이고, default라는 의미는 FBX SDK가 처리할 수 있는 모든 데이터 타입을 임포트한다는 의미이다.

       */
        FbxIOSettings * pIOsettings = FbxIOSettings ::Create(g_fbxSdkManager, IOSROOT );
       g_fbxSdkManager->SetIOSettings(pIOsettings);

        // Import options determine what kind of data is to be imported.
        // True is the default, but here we’ll set some to true explicitly, and others to false.
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_MATERIAL, true);
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_TEXTURE, true);
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_LINK, false);
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_SHAPE, false);
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_GOBO, false);
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_ANIMATION, true);
        //(*(g_fbxSdkManager->GetIOSettings())).SetBoolProp(IMP_FBX_GLOBAL_SETTINGS, true);

        /*     Scene 생성
             - 하나의 FBX 파일은 하나의 scene만을 가진다.
             - Scene Scene Graph 노드를 저장하고 있다.
       */
        FbxScene* pFbxScene = FbxScene::Create(g_fbxSdkManager, "" );
        _ASSERT(pFbxScene != NULL);

        /*     FBX Scene으로 file을 임포트한다.
             1. import 객체 생성
             2. initialize 함수로 임포트할 파일 설정
       */
        FbxImporter * pImporter = FbxImporter ::Create(g_fbxSdkManager, "");
       {
              char fname[128];
             stringUtil::conv_s(fname, 128, filename);

              // 파일 설정
              bool result = pImporter->Initialize(fname, -1, g_fbxSdkManager->GetIOSettings());
              if (result = false)
             {
                     DebugOutMsg ("Call to KFbxImporter::Initialize() failed." );
                     DebugOutMsgFormat ("Error returned: %s" , pImporter->GetStatus().GetErrorString());
             }

              // 버전 체크
              int fbxMajorVer, fbxMinorVer, fbxRevisionVer;
              FbxManager ::GetFileFormatVersion(fbxMajorVer, fbxMinorVer, fbxRevisionVer);

              int majorVer, minorVer, revisionVer;
             pImporter->GetFileVersion(majorVer, minorVer, revisionVer);

              // Import from file to fbxScene
             result = pImporter->Import(pFbxScene);
              if (result == false)
                     return NULL;

             pImporter->Destroy();
       }

        // Scene Graph 순회...
        FbxNode* pFbxRootNode = pFbxScene->GetRootNode();


다음에는 Scene Graph 순회하는 것부터 하자!!!

덧글

댓글 입력 영역



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu