簡體   English   中英

3d幾何:如何將對象與矢量對齊

[英]3d geometry: how to align an object to a vector

我有一個3d空間中的對象,我想根據向量對齊。 我已經通過在矢量的x和z分量上執行atan2來獲得Y旋轉。 但我還希望進行X旋轉以使對象向下或向上看。

想象一個飛機做它的俯仰偏轉滾動,只是沒有滾動。

我使用openGL來設置旋轉,所以我需要一個Y角和一個X角。

我不會使用歐拉角,而是使用歐拉軸/角度。 就此而言,這就是Opengl glRotate用作輸入的內容。

如果您想要的只是將矢量映射到另一個矢量,那么可以進行無限次的旋轉。 對於最短的一個(具有最小旋轉角度的那個),您可以使用由fromto單位向量的叉積找到的向量。

axis = from X to

從那里,旋轉角度可以從from.to = cos(theta) (假設單位矢量)

theta = arccos(from.to)

glRotate(axis, theta)然后將改變fromto

但正如我所說,這只是可以完成這項工作的眾多輪換中的一個。 您需要一個完整的參考來更好地定義您希望如何完成轉換。

您應該使用某種形式的四元數插值( 球面線性插值 )來動畫對象從其當前方向到此新方向的動畫。

如果使用四元數(向量空間數學)存儲方向,則可以非常輕松地獲得兩個方向之間的最短路徑。 有關一篇好文章,請閱讀了解Slerp,然后不使用它

如果你使用歐拉角,你將受到萬向節鎖和一些非常奇怪的邊緣情況。

實際上......看看這篇文章。 它描述了Euler Angles,我相信這就是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM