すべてのオブジェクトの変換が親に対して相対的な私の3Dゲームのシーングラフを作成しようとしています。グラフの各ノードには、Rotation、Scaling、およびTranslationベクトルがあります。絶対的な変換に対する3D
相対変換行列を組み合わせてオブジェクトの絶対的な変換を得る正しい方法は何ですか?あなたのソリューションについても説明できれば嬉しいです。ここ
それは間違って行うの例である:この場合、
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
、親ノードが回転する:
これは実際には溶液であることが判明尺度変更または移動された場合、子供は同じ量に変換されますが、これは正しい動作です!
しかし、子供は自分の起源の周りだけを回転し、親の起源の周りを移動しません。
用途:
四輪での車のモデルがあります。車輪は車の原点の周りに相対的に配置されています。実際の車輪のように車輪は回転できます。私が今車を回転させると、車輪は常にその車に取り付けられたままでいるべきです。この場合、車はルートで、車輪は子ノードです。
もう1つの例は、太陽系のモデルです。惑星は自分の軸を中心に回転し、太陽の周りを移動し、月は惑星の周りを移動します。
私の最初のアイデアは、私はそれが実際には解決策ではないと考えていたことを思い出します。私はこれを解決するために過去数時間を費やしました。 * facepalm * 皆さん、迅速で正確なヘルプに感謝します! – Lucius