ホーム < ゲームつくろー! < FBX修得編


その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;
}