2013-03-28 52 views
0

我正在用LWJGL製作3D遊戲。在這個遊戲中,無論何時按下箭頭鍵,我都希望屏幕沿該方向旋轉,而不管當前的方向如何。我正在努力在代碼中實現這一點。使用三個基於旋轉矢量3f的函數,並不能實現這一點。上下旋轉是因爲首先調用glRotatef(rotation.x, 1, 0, 0),但只有當您不向上或向下時,左右才能正常工作。如果是,則圍繞通用Y軸旋轉,並且相機旋轉。我看到另一個實現可能使用gluLookAt(),但我想我會遇到同樣的問題。如何在openGL或更具體的LWJGL中相對於相機旋轉?

編輯 我以爲我解決我的問題,通過改變順序由名爲取決於我想旋轉的方向在哪裏glRotatef()。我認爲這是可行的,因爲在我的比賽中,我只會一次旋轉一個軸。它在某種程度上有效,但在某些方面它沒有。

 if(updown){ 
      glRotatef(rotation.x, 1, 0, 0); 
      glRotatef(rotation.y, 0, 1, 0); 
     } else if(leftright){ 
      glRotatef(rotation.y, 0, 1, 0); 
      glRotatef(rotation.x, 1, 0, 0); 
     } 
     glTranslatef(position.x, position.y, position.z); 
+0

看看紅皮書的第2章和第3章,它可能會幫助你圍繞在opengl中矩陣操作的順序:http://www.glprogramming.com/red/ – Patashu 2013-03-28 03:31:07

+0

你應該回答你自己的問題問題是否找到解決方案。如果答案和問題是單獨的,對於人來說更容易。 – Hydronium 2013-03-28 18:04:56

+0

對不起。當我真正解決這個問題時,我會考慮這一點。我的解決方案實際上不起作用 – ErMay12 2013-03-28 19:01:23

回答

0

gluLookAt可能會讓你有更快的速度,但你需要手動旋轉關於原點座標的眼座標。有了gluLookAt,如果您打算圍繞所有3個軸旋轉,還需要計算向上向量。

我有一個預感,你只需要在做glRotate之前添加一個glTranslate,以便相機有一些東西可以繞着軌道運動。

如果您顯示一些代碼,您可能可以獲得更多幫助。

+0

非常感謝您的快速響應。這不是glplanslate錯位的問題。我對gluLookAt()的理解是,它對你的眼睛和你的眼睛所看到的另一個點的位置有一個吸引力。這第二點並不重要,它與眼睛有多遠。最後,三個數字決定了攝像機的方向(哪個方向上)。這是真的。如果是這樣,那麼我怎麼可能會去實現這個數學。我會想象我會使用某種觸發,但我不確定如何在3D空間中這樣做。 – ErMay12 2013-03-28 13:38:36

+0

另外,爲什麼向上矢量由三個數字定義?是不是隻限於圍繞眼睛創造的線和它看起來的一個旋轉。 – ErMay12 2013-03-28 15:09:08

0

我已經解決了這個問題,並且繼續前進。因爲我一次只能旋轉一個軸90度,所以我經歷了所有64個可能的方向,並且手動應用了必要的穿孔。