2016-10-26 72 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