【问题标题】:Flickering on simple triangle render in openGL在openGL中的简单三角形渲染上闪烁
【发布时间】:2016-10-27 08:21:50
【问题描述】:

我们当前的任务要求我们在 openGL 中使用旧的固定管道方法。我们使用的是 LWJGL 2.9.3。以下代码显示一个三角形。问题是,它像疯了一样闪烁。 Display.swapBuffers() 方法不会抛出异常,我是否包含它也没有任何区别。我根据这个 StackOverflow 问题创建了这个示例:

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 更改)。

【问题讨论】:

    标签: java opengl rendering lwjgl doublebuffered


    【解决方案1】:

    闪烁的原因是 gluLookAt() 函数在不同方向之间来回切换。

    【讨论】:

    • 所以基本上你必须添加glLoadIdentity() 然后发现gluLookAt 看错了方向?
    • 是的。它看错了方向。如果眼睛在 (0,0,0),并且注视点在 (0,1,0),那么它正在向下看 Y 轴。多边形平行于 X/Y 平面。我把 1 放错地方了。
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多