FBX2019.0
その2 FBXファイルの読み込みと終了処理
前章でプロジェクト内でFBX SDKを使えるようにしました。この章ではFBXファイルを読み込むための処理とその終了手順を見ていきましょう。
@ FbxSceneにインポート
この章のゴールはFBXファイル内の情報を格納するFbxSceneオブジェクトを作る事です。その手順はお決まりになっていて、以下のようにします:
#include "stdafx.h"
#include <fbxsdk.h>
int main()
{
// マネージャを生成
FbxManager *manager = FbxManager::Create();
// IOSettingを生成
FbxIOSettings *ioSettings = FbxIOSettings::Create( manager, IOSROOT );
// Importerを生成
FbxImporter *importer = FbxImporter::Create( manager, "" );
if( importer->Initialize( "SD_unitychan_humanoid.fbx", -1, manager->GetIOSettings() ) == false ) {
// インポートエラー
return -1;
}
// SceneオブジェクトにFBXファイル内の情報を流し込む
FbxScene *scene = FbxScene::Create( manager, "scene" );
importer->Import( scene );
importer->Destroy(); // シーンを流し込んだらImporterは解放してOK
// Scene解析
// ...
// マネージャ解放
// 関連するすべてのオブジェクトが解放される
manager->Destroy();
return 0;
}
まずすべてを統括するFbxManagerオブジェクトをFbxManager::Createメソッドで作ります。
次にFBXに対する入出力を定義するFbxIOSettingオブジェクトを作ります。FbxIOSettings::Createメソッドの第1引数にFbxManagerオブジェクトを渡します。第2引数には名前を渡すのですが、特別な理由が無ければデフォルト定義であるIOSROOTでOKです。
続いてFBXファイルから実際に情報を取り出すFbxImporterオブジェクトを生成します。引数はコードの通りです。Importerを作成できたらInitializeメソッドで初期化します。この時に有効なFBXファイル名を第1引数に与えます。第2引数にはファイルフォーマットを表す整数値を渡すのですが、-1にすると自動判別してくれます。第3引数には入出力設定となるFbxIOSettingオブジェクトを渡します。これは上のコードのようにFbxManager::GetIOSettingsメソッドを通した方が確実ですが、ioSettingsを直接渡しても大丈夫です。
ここまでがFBXファイルの読み込みになります。FbxImport::Initializeメソッドが成功すればFBXファイルから情報を取り出せる準備が整っています。
FBXの中身は巨大な情報のツリー構造になっています。欲しい情報をツリーを辿って探し、アクセスオブジェクトを通して得るのが基本的な操作方法になります。そのツリーの一番トップにあるのが「Scene」です。FbxSceneオブジェクトはそのシーンへのアクセスを提供してくれます。FbxSceneオブジェクトはImporter::Importメソッドに空のFbxSceneオブジェクトを渡す事で作る事が出来ます。上のコードのように、Importメソッドを呼ぶとFbxSceneオブジェクトにすべての情報が格納されるため、Importerはもう必要無くなります。Destoryメソッドを呼んで解放してしまって構いません。
以後このsceneオブジェクトを通してFBXファイル内のあらゆる情報を取得できるようになります。その解説は後の章で説明致します。シーンの解析が全部終了したら、生成したオブジェクトを解放する必要があるのですが、それはFbxManager::Destoryメソッドを一つ呼ぶだけでOKです。これでmanagerに紐づいたすべてのオブジェクトが芋づる式に解放されます。
という事で、FBXファイルの読み込みと解放はかなりシンプルで簡単にできます。では、いよいよFBX内のモデル情報へアクセスしましょう(^-^)