2008年10月26日日曜日

Skinned mesh

スキンメッシュのコアの部分をメモ
Colladaを読み込む事で、
バインドポーズ逆行列[i]・Jointの行列[i]・モデルの頂点座標・weight[i]が 取れる。(iはJointのIndex)

バインドポーズの逆行列はINV_BIND_MATRIXってColladaのファイル内に書かれている行列。Jointの行列[i] = (・・・*Joint[i]の親の親の変換行列*Joint[i]の親の変換行列*Joint[i]の変換行列)ってな感じで再帰的に計算する。

//変形後の頂点を得るための式
finalPosition = ∑( weight * JointMatrix[i] * BindPoseInversMatrix[i] * originalPosition );
でボーンを曲げた後の各頂点の位置を計算できる。

ここらへんを参照
http://www.gamedev.net/community/forums/topic.asp?topic_id=392338
http://marupeke296.com/DXG_No27_SkinMeshAnimation.html
http://marupeke296.com/DXG_No28_SkinMeshDrawing.html

ただ、今CPUで無理矢理計算しているので重すぎる。バーテックスシェーダーを使ったスキンメッシュに変えないと。自分のノートパソコンが対応してないようなので、学校のパソコン使わなきゃ。

0 件のコメント: