2015-08-21 81 views
1

我試圖渲染一個簡單的軸顯示如下,除了使用簡單的2D線。如何渲染俯仰,滾動和偏航的3D軸?

axes

我對俯仰,偏轉和滾動該軸應顯示的角度值。 (例如PI/2,PI/4,PI * 3/2)

我有一個函數可以在2D空間中給出起始點和結束點的2D線。

給定角度,我該如何正確渲染一組旋轉的軸?我不關心z-索引(所以如果有時候這些行不正確地顯示在彼此之上,只要他們指向正確的方向就行)。

我已經試過

我知道,所有行的起點也只是在軸的中心,我們會說,中心在(0,0)和軸的長度將爲100.這使我可以計算3個軸中每個軸的端點。

我已經定義了X軸是從左到右,Y軸是上下的,Z軸是後向的(即在屏幕外)。

節距是圍繞X軸旋轉,滾動是繞Z軸旋轉,偏航是圍繞Y軸旋轉。

要計算X軸終點我做:

x = cos(roll) * cos(yaw) * 100; 
y = sin(-roll) * 100; 

爲了計算Y軸終點我做:

x = cos(roll + PI/2) * 100; 
y = sin(-roll - PI/2) * sin(PI/2 - pitch) * 100; 

要計算Z軸我已經完成的終點:

x = cos(PI/2 - yaw) * 100; 
y = sin(PI - pitch) * 100; 

這可能很明顯,我真的不知道我在做什麼。當我應該使用像矩陣這樣更高級的東西時,我覺得我正在採取非常幼稚的方法。如果它有所作爲,我使用C,但psuedocode很好。任何幫助,將不勝感激。

回答

1

首先,您需要同意旋轉的順序。在下面,我假設訂單x,y,z(俯仰,偏航,滾動)。

端點只是根據rotation matrix的列向量。然後,您需要將3d點投影到2D屏幕上。看起來好像您使用簡單的正交投影(移除z座標)。所以這裏是結果:

x1 = 100 (cos yaw * cos roll) 
y1 = 100 (cos pitch * sin roll + cos roll * sin pitch * sin yaw) 

x2 = 100 (-cos yaw * sin roll) 
y2 = 100 (cos pitch * cos roll - sin pitch * sin yaw * sin roll) 

x3 = 100 (sin yaw) 
y3 = 100 (-cos yaw * sin pitch) 
+0

謝謝,它的效果很好。 – fruitcup

相關問題