Xファイルを読んでみる

こっちを見てくれる人もまだいらっしゃるみたいなので、
有益と思われる情報はこちらにものせるようにします。
 
 
http://www.h6.dion.ne.jp/~game296o/DXG_No24_WhatIsFrame.html
を参考にXファイルの構造をお勉強。
 

「フレーム」と「アニメーション」

Xファイルは、

  • フレーム
  • アニメーション

でモデルを管理しているみたい。
 
そして、
それぞれが別の次元で管理されている
というのがポイントになりそうな感じです。
 

大まかな図

大まかにまとめた図がこちら

「フレーム」「アニメーション」、それぞれが、
メッシュ情報を「参照」で保持しています。
 

フレーム

フレームは、

  • メッシュの参照
  • ローカル変換行列

という情報を保持しています。
つまり、アニメーションの情報は保持していません。
 
あと、兄弟フレームや子フレームの情報が階層化して保持されています。
 

アニメーション

  • メッシュの参照
  • アニメーションキー

の情報を持っています。
 

アニメーションキー
  • キーフレームの種類
  • キーフレームのデータ配列

を保持しています。
 
AnimationKeyの例。

「2」を指定しているので、
これは「平行移動」のキーフレームアニメーションですね。
 
それぞれの時刻ごとに、X,Y,Zに平行移動します。
 
うーん、まだまだよく分からないことが多いけど、とりあえず今日はここまで。

メッシュアニメーション

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

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

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

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

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

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

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

フレームとは

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

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

メッシュコンテナ

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

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

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

DirectXの操作手順

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

生成

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

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

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

3Dゲーム開発のお勉強リンク

最近、3Dの勉強をほったらかしにしていたので、そろそろ勉強せねばと、
メッシュアニメあたりの情報を重点的にリンク。
 

DirectX技術編」がメッシュアニメーション周りの情報が充実していて良い感じ。
あと、「衝突判定編」も充実して勉強になります。
 

HSPで3Dができる「Easy3D」、
六角大王メタセコに、ボーン・モーションをつけられる「RokDeBone2」、
こういうツールを使ってみて勉強するのもありかもしれない。
 

IK周り。

物理。

 

 
うーん、勉強すること盛りだくさん。

日記を移転しました

日記を「Hatena::Group::Gamehell」に移転しました。
http://gamehell.g.hatena.ne.jp/kenmo/
 
まー、特に何が変わったわけではなく、
「グループキーワード」と「あしか」を使いたかっただけなのですが……。