奇怪的OpenGL像素化行为

时间:2017-03-12 21:36:33

标签: opengl glut pyopengl vsync

我正在使用PyOpenGL和GLUT绘制一个以圆圈运动的正方形。绘制正方形后我没有清除屏幕,因为我想要一个尾随效果。出于某种原因,已经绘制的正方形将在绘制新的正方形时移动。

注意,正方形笔划中的额外像素问题。事实上,正方形的轨迹不是静态的。

Here是效果的一个例子

我提供的代码与我认为相关。首先,我用来初始化窗口的代码:

glutInit()
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
glutInitWindowSize(width, height)

其次,在绘制每个方格之前调用一段代码。

glLoadIdentity()
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, width, 0.0, height, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

第三,正方形的实际绘图

def rect_fill(x, y, w, h):
    glBegin(GL_QUADS)
    glVertex2f(x, y)
    glVertex2f(x + w, y)
    glVertex2f(x + w, y + h)
    glVertex2f(x, y + h)
    glEnd()

def rect_stroke(x, y, w, h, lw):
    lw = lw / 2
    glBegin(GL_LINES)
    glVertex2f(x - lw, y)
    glVertex2f(x + w + lw, y)

    glVertex2f(x + w, y - lw)
    glVertex2f(x + w, y + h + lw)

    glVertex2f(x + w + lw, y + h)
    glVertex2f(x - lw, y + h)

    glVertex2f(x, y + h + lw)
    glVertex2f(x, y - lw)
    glEnd()

我已经有一段时间了,并且找不到有类似问题的人。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

问题在于

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)

GLUT_DOUBLE启用双缓冲。双缓冲提供两个完整的颜色缓冲区,用于绘图。在绘制另一个缓冲区时显示一个缓冲区。绘图完成后,交换两个缓冲区,以便正在查看的缓冲区现在用于绘图。

这就是造成两个不同方格效应之间奇怪变化的原因。