我想爲我的3D遊戲創建一個場景圖,其中每個對象的變換都是相對於它的父元素的。圖形的每個節點都有一個旋轉,縮放和平移矢量。3D相對於絕對變換
將相對變換矩陣組合以獲得對象的絕對變換的正確方法是什麼?如果您也可以解釋您的解決方案,我會很高興。
這裏是做一個例子是錯誤的:
這實際上原來是溶液:
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
在這種情況下,當父節點旋轉,縮放或移動,孩子變成了相同的數量,這是一個正確的行爲!
但是,孩子只會圍繞自己的原點旋轉,不會圍繞父母的原點移動。
應用:
有一個汽車模型有四個輪子。車輪相對位於汽車的原點周圍。車輪可以像真實車輪一樣旋轉。如果我現在旋轉汽車,車輪應始終保持與其連接。在這種情況下,汽車是根,車輪是兒童節點。
另一個例子是太陽系的模型。行星圍繞自己的軸旋轉,圍繞太陽移動,並且衛星在行星周圍移動。
原來,我的第一個想法是如何做到這一點,然後我認爲不適合,實際上是解決方案!我花了幾個小時試圖解決這個問題。 * facepalm * 感謝大家的快速和準確的幫助! – Lucius