その2 FBXファイルの読み込みと終了処理:サンプルプログラム
FBX修得編その2「FBXファイルの読み込みと終了処理」で説明した内容を踏まえたサンプルプログラムです。実行すると指定のFBXファイルからシーンオブジェクトを作り、読み込んだFBXファイルのバージョンを返します。すべての基礎となるサンプルです。
サンプルスクリーンショット。FBXファイルバージョンを出力しています。
以下のプログラムは、FBX SDKをプロジェクトに設定し(設定方法はこちらを参照)、新規のコンソールプロジェクトにコピペしてsmple.fbxというFBXファイルをソース内のfilePathという文字列変数に定義してあるパスに置くと完全に動きます。ソース及びオブジェクトはこちらからダウンロードできます(FBXSmp_No2.lzh)。上からデバッグしていくと、何をしているか良くわかるように1つのソースで完結させています。今回のポイントになりそうなところは太文字で示されています。
(もしうまく動かないようでしたら掲示板にてご連絡下さい)
// FBXファイル読み込みシンプルプログラム #include <tchar.h> #include "fbxsdk.h" #include <crtdbg.h> // FBXファイルからシーンを作成 bool createSceneFromFBX( const char* filePath, KFbxSdkManager *pSdkManager, KFbxScene** ppScene, KFbxImporter** ppImporter = 0 ) { // インポータの生成 KFbxImporter* importer = KFbxImporter::Create( pSdkManager, "" ); int fileFormat = -1; if ( !pSdkManager->GetIOPluginRegistry()->DetectFileFormat( filePath, fileFormat ) ) { // 失敗 importer->Destroy(); return false; } importer->SetFileFormat( fileFormat ); if( importer->Initialize( filePath ) == false ) { importer->Destroy(); return false; } // インポータとシーンを関連付け *ppScene = KFbxScene::Create( pSdkManager,"" ); importer->Import( *ppScene ); if ( ppImporter != 0 ) { *ppImporter = importer; } else { importer->Destroy(); } return true; } int _tmain(int argc, _TCHAR* argv[]) { // メモリリーク検出 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); // SDKマネージャ生成 KFbxSdkManager* pSdkManager = KFbxSdkManager::Create(); // シーン作成 KFbxScene *pScene; KFbxImporter *importer; const char* filePath = "c:/work/sample.fbx"; if ( !createSceneFromFBX( filePath, pSdkManager, &pScene, &importer ) ) { return 0; } // ファイル情報を取得 int major, miner, revision; importer->GetFileVersion( major, miner, revision ); printf( "Succeed reading %s.\n", filePath ); printf( "FBX File Version : ver %d. %d. %d\n", major, miner, revision ); // SDKマネージャの削除 pSdkManager->Destroy(); return 0; }