FBX SDKの始め方/インポートの仕方/終わらせ方
概要
最終更新日:2020/03/16 FBXSDKバージョン:FBX SDK 2020.0.1 VS2017 FBX SDKでFBXファイルをインポートする方法について書いた記事です。 主に次の項目に該当する方に向けて書いています。
- FBX SDKの始めにやることを知りたい
- FBX SDKで最後にやることを知りたい
- FBXファイルを開きたい
- FbxManagerの役割を知りたい
- FbxImporterの役割を知りたい
- FbxSceneの役割を知りたい
サンプル
サンプルはここからダウンロードできます。 環境については以下の内容となっています。
VSのバージョン | VisualStudio 2019 |
---|
目次
FBXファイルをインポートするまでの流れ
FBXを使用するにはFBXSDKの各クラスを使用して行います。 FBXSDKでファイルをインポートすることで、プログラム側で扱える状態にします。 インポートが完了したらメッシュデータなどの情報の取得ができるようになります。 FBXSDKでFBXファイルをインポートをする流れは以下の通りです。
- FbxManagerを作成する
- FbxImporterを作成する
- FbxSceneを作成する
- ファイルを初期化する
- ファイルをインポートする
FbxManagerを作成する
FBXファイルを開くにはFbxManagerを作成することから始まります。
FbxManagerとはFbxImportやFbxSceneを作成するために必要な管理クラスです。
作成はFbxManagerクラスのstaticメソッドの「Create」を使用して行います。
// FbxManager作成
FbxManager* fbx_manager = FbxManager::Create();
if (fbx_manager == nullptr)
{
// 作成失敗
return 0;
}
FbxImporterを作成する
FbxManagerを無事に作成できたら、FbxImporterの作成をします。
FbxImporterはFbxファイルをImportするためのパーサークラスです。
このクラスでファイルの持つデータをメッシュやカメラなどの情報に分解してくれます。
作成はFbxImporterクラスのstaticメソッドの「Create」を使用して行います。
// FbxImporter作成
FbxImporter* fbx_importer = FbxImporter::Create(fbx_manager, "ImportTest");
if (fbx_importer == nullptr)
{
fbx_manager->Destroy();
// 作成失敗
return 0;
}
FbxSceneを作成する
FbxImporterの作成も終了したら、次はFbxSceneの作成です。
FbxSceneはImporterによって、分解されたFbxのデータを保存するためのクラスです。
SceneとImporterとの関係は「ファイルをインポートする」で説明します。
FbxSceneの作成はFbxSceneクラスのstaticメソッドの「Create」を使用して行います。
// FbxScene作成
FbxScene* fbx_scene = FbxScene::Create(fbx_manager, "SceneTest");
if (fbx_scene == nullptr)
{
fbx_importer->Destroy();
fbx_manager->Destroy();
// 作成失敗
return 0;
}
ファイルを初期化する
ImporterとSceneが作成出来たらFbxファイルを初期化します。
ファイルの初期化はImporterの「Initialize」を使います。
FBXSDKでは「Open」の代わりに「Initialize」でファイル名を指定することで
指定されたファイルを開いて、初期化します。
// ファイルを初期化する
if (fbx_importer->Initialize("Box.fbx") == false)
{
fbx_importer->Destroy();
fbx_scene->Destroy();
fbx_manager->Destroy();
// 初期化失敗
return 0;
}
ファイルをインポートする
ファイルを無事に開くことができたら、次はSceneにインポートします。
Importerはファイルをインポートするための分解機能などがそろっていますが、
データ自体はImporter側は分解前のデータを保存しています。
分解後のデータの保存する役割を持っているのがSceneクラスです。
ImporterからSceneにデータをインポートする際に、
データをメッシュやカメラ、ボーンデータなどに分解してSceneに渡します。
Sceneにインポートする方法はImpoterの「Import」を使用します。
// インポート
if (fbx_importer->Import(fbx_scene) == false)
{
fbx_importer->Destroy();
fbx_scene->Destroy();
fbx_manager->Destroy();
// インポート失敗
return 0;
}
第一引数のFbxDocumentはFbxSceneの親クラスです。
Importは分解処理まで行われるために非常にコストが高い処理です。
その為、スレッドを作成したり、第二引数の非同期フラグをtrueにして対応します。
FBX SDKを終わらせる
インポートしたSceneからデータを取得したらFbxManager、FbxImporter、FbxSceneは
必要なくなるので、全て破棄します。
破棄のメソッドは共通で「Destroy」を使用します。
if (fbx_importer != nullptr)
{
fbx_importer->Destroy();
}
if (fbx_scene != nullptr)
{
fbx_scene->Destroy();
}
if (fbx_manager != nullptr)
{
fbx_manager->Destroy();
}
各クラスの破棄を忘れるとリークなどに繋がるので必ず破棄してください。