ボーンオフセット行列

以下は SkinWeights チャンクですが、最後の方にある matrixOffset は ボーンオフセット行列と呼ばれます。

SkinWeights
   {
    "Joint_2";  //transformNodeName ボーン名
    32;  //nWeights ボーンの影響を受ける頂点の数
    0,  // ↓ vertexIndices ボーンの影響を受ける頂点のインデックス



    0.001631,  // ↓ weights ボーンの影響を受ける各頂点の重み



    1.000000,0.000000,-0.000000,0.000000,  // ↓ matrixOffset
    0.000000,1.000000,-0.000000,0.000000,  //メッシュの頂点をボーン空間に変換する行列
    -0.000000,-0.000000,1.000000,0.000000,
    0.679024,197.417007,-0.000000,1.000000;;
   }

これはボーンをグローバル座標の原点に移動させる行列ですが、
なぜ、これが必要になるのかを解説します。

上図のような状態があったとします。
Bの三角形をAの三角形と接している地点から左に60度回転させたい場合、どうするでしょう?
アフィン変換の場合は glPushMatrix glPopMatrix の行列スタックがあるので
特別に意識せずとも簡単に目的の状態にできると思います。

ところが、これを頂点座標でやろうとすると行列スタックが使えないので
行列スタックに頼らない方法を用いなければなりません。

アフィン変換で行列スタックを使用せずに回転する場合は一旦、グローバル座標の原点に
移動させてから回転し、また元の位置に戻すという事をします。

 

 

 

最終更新:2012年07月30日 11:51
添付ファイル