2014-05-09 118 views
0

這是我和我的程序繪製圖像:OpenGL。 gluLookAt功能不工作

[IMG] http://i62.tinypic.com/j163j8.png [/ IMG]

它應該是3D。當我試着使用gluLookAt來檢查它:

GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 
GL.glLoadIdentity(); 
GL.glMatrixMode(GL.GL_MODELVIEW); 

glu.gluLookAt(
5.0, 2.0, 2.0, 
0.0, 0.0, 0.0, 
0.0, 0.0, 0.0); 

figura(drawable); //Drawing figure 
GL.glFlush(); 

只顯示白色畫面,或爲第二一個亂七八糟的人物,然後熄滅。如果我看到前三個coords顯示角度不錯,第二個3顯示查看目的地,第三個顯示旋轉軸。但是這個函數只會把所有東西都弄亂。

感謝您的回答。

+0

第三個3是「up」向量,請嘗試'glu.gluLookAt(5.0,2.0,2.0,0.0,0.0,0.0,0.0,1.0,0.0);' –

+0

@AnthonyVallée-Dubois這將是一個有效的向上向量如果眼睛在與目標相同的XZ平面上,即。 {5,0,2}而不是{5,2,2}。 – schmop

+0

@schmop也許我錯了,因爲它已經有一段時間了,但是我的理解是,向上矢量是通過'gluLookAt()'重新計算的,以便垂直於方向矢量,例如'side = cross(dir,up); up = cross(side,dir);'。請參閱:http://www.opengl.org/wiki/GluLookAt_code –

回答

1

最後三個參數並不完全是旋轉,而是「向上」向量。如果你不想要扭曲視圖,向上矢量應該垂直於你的方向矢量,這裏是{-5,-2,-2}。在所有垂直向量中,您將選擇的向量將在您調用它時定義旋轉。

在您的示例中,標準化後最向上的垂直向量(例如,您將在第一人稱遊戲中使用的向量)爲{-.323,.937,-129}。我首先通過找到「左」向量(絕對向上{0,1,0}和方向之間的交叉積),然後作爲方向和「左」之間的叉積來計算它。

+0

'gluLookAt()'相對於眼睛向量正交化向上向量。沒有必要手動完成。見http://www.manpagez.com/man/3/gluLookAt/。 –

+0

@ReetoKoradi好吧。這從OpenGL參考頁面中不太清楚。 – schmop