0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DirectX】Assimpを用いたFBXモデルの読込でつまづいたところ

Last updated at Posted at 2024-11-16

DirectXでAssimpによるモデル読み込みでかなりつまづいた点を紹介します。

目的

3Dアニメーションの読込を行いボーンアニメーションを再生する。

最初に行ったモデル読込

const aiScene* scene = aiImportFile(fileName, 
aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_ConvertToLeftHanded);

aiImportFileで簡単にロードしていましたがこれはボーンアニメーションを行う際ひとつ問題が生まれます。

それは元々なかったノードが追加されるということです

追加されるノード

元々のボーン構成

スライド2.JPG
FBXモデルのボーン構成だとします。
RootからHipが繋がっており、Hipには子は存在しないです。

aiImportFileされた後の構成

n.jpg

なにやらよくわからないものがついてます。
『元々のボーン名 + Assimp_FBX + ****』というノードが追加されました。
これらはAssimpでFBXファイルを読み込む際にAiNodeだけで保持できないFBX形式についてる情報を補間するためのノードです。

ただ私の場合追加されるノードは不必要ですし、残しておいてもいいことはあまりないのでこれを追加しないロード方法が必要です。

追加ノードを無効にするモデル読込

Assimp::Importer importer;
importer.SetPropertyBool(AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS, false);
const aiScene* scene = importer.ReadFile(fileName
, aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_ConvertToLeftHanded);

Assimp::Importerを用いてロード方式の設定を行っています。
SetPropertyBoolメソッドで特定の要素の値を設定できるので追加ノードを作らないようfalseにしました。

さて、あとはaiSceneを用いてデータ抜き出して描画すればいっか!と思っていましたがなぜかエラーがでる!

原因

Importerが破棄されるとSceneも破棄される!

すごく単純でした...orz
クラスのメンバ変数にImporter入れるとか変数の寿命を延ばせばいいだけですね。

おわり

新しく使うものはよく調べましょう
でないとこれで二時間も溶かした私みたいになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?