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(); }
各クラスの破棄を忘れるとリークなどに繋がるので必ず破棄してください。