2016-10-26 71 views
0

我們當前的任務要求我們在openGL中使用較老的固定管道方法。我們正在使用LWJGL 2.9.3。以下代碼顯示一個三角形。問題是,它瘋狂地閃爍。 Display.swapBuffers()方法不會拋出異常,並且如果包含它或不包含任何差異。我創建了一個基於關閉此StackOverflow的問題,這個例子:在openGL中閃爍簡單的三角形渲染

gluPerspective, glViewport, gluLookAt and the GL_PROJECTION and GL_MODELVIEW Matricies

glViewport(0, 0, Display.getWidth(), Display.getHeight()); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, 10, 0, 10, -1, 100); 

glMatrixMode(GL_MODELVIEW); 
glClear(GL_COLOR_BUFFER_BIT); 

gluLookAt(0, 0, 0, 0, 0, 1, 0, 1, 0); 
glBegin(GL_POLYGON); 
    glVertex3d(1, 1, 1); 
    glVertex3d(1, 5, 1); 
    glVertex3d(5, 5, 1); 
glEnd(); 
glFlush(); 
try { 
    Display.swapBuffers(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

編輯其他

一兩件事。如果我在glMatrixMode(GL_MODELVIEW)之後調用glLoadIdentity(),就好像忽略了gluLookAt()方法。我只是看到一個空白的黑屏,如果我這樣做。但如果我不這樣做,它會不斷增加(如果我從0,0,0改變眼睛的位置)。

回答

0

閃爍的原因是gluLookAt()函數在看不同方向之間來回切換。

+0

所以基本上你必須添加'glLoadIdentity()',然後發現'gluLookAt'看着錯誤的方向? – ybungalobill

+0

是的。它看着錯誤的方向。如果眼睛在(0,0,0)處,並且觀察點位於(0,1,0)處,則它正在向下看Y軸。多邊形平行於X/Y平面。我把1放在錯誤的地方。 – AaronF