3Dゲームのシーングラフを作成しようとしています。このグラフでは、すべてのオブジェクトの変換がその親に相対的です。グラフの各ノードには、回転、スケーリング、および平行移動のベクトルがあります。
オブジェクトの絶対変換を取得するために相対変換行列を組み合わせる正しい方法は何ですか?解決策についても説明していただければ幸いです。
これは間違った方法の例です:
これが実際に解決策であることが判明しました:
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
この場合、親ノードを回転、スケーリング、または移動すると、子は同じ量だけ変換されます。これは正しい動作です。
ただし、子は自分の原点を中心に回転するだけで、親の原点を中心に移動することはありません。
アプリケーション:
4輪の車種があります。ホイールは、車の原点の周りに相対的に配置されます。ホイールは、実際のホイールと同じように回転できます。今、車を回転させると、車輪は常に車に取り付けられたままになります。この場合、車はルートであり、ホイールは子ノードです。
別の例は、太陽系のモデルです。惑星はそれ自身の軸の周りを回転し、太陽の周りを動き、そして衛星は惑星の周りを動きます。