メッシュアニメーション

メッシュアニメーションを再勉強。
http://www.h6.dion.ne.jp/~game296o/DXG_No23_AnimationFromXFile.html
ここを参考に。
 

メッシュアニメーションとは

メッシュとは、ポリゴンの塊。
その塊を動かす(平行移動・回転する)のが、メッシュアニメーション。
メッシュの形状を変えて動かしてしまうのが、スキンメッシュアニメーション。
 

DirectXでのメッシュアニメーション

大きく分けて、以下の3つのオブジェクト操作する。

  • フレーム
  • メッシュコンテナ
  • アニメーションコントローラー

これらの上位にAllocateHierarchyがいるらしいのですが、
それを操作しているところなさそうなのでパスします。
 

フレームとは

メッシュコンテナを管理しているもの。らしい。
兄弟フレーム、子フレームのポインタを持っている階層構造になっている。

あと、動きを定義する「行列」データを保持している。
 

メッシュコンテナ

メッシュを管理しているもの。
次のメッシュのポインタを持っている(単方向リスト)
 

アニメーションコントローラー

経過時間をセットすると、最上位のフレームの行列データが更新される(みたい)
 

DirectXの操作手順

色々省略しているけど、大雑把にこんな流れ。

生成

D3DXLoadMeshHierarchyFromXで、
AllocateHierarchy、フレーム、アニメーションコントローラー
を生成。

更新
  1. アニメーションコントローラーのSetTimeで、フレームの行列を更新。
  2. フレームの階層をたどって、すべてのフレームの行列を更新。
描画

フレームの階層をたどって、すべてのメッシュコンテナのメッシュを描画。