我正在使用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()
我已经有一段时间了,并且找不到有类似问题的人。谢谢你的帮助。
答案 0 :(得分:1)
问题在于
行glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
GLUT_DOUBLE
启用双缓冲。双缓冲提供两个完整的颜色缓冲区,用于绘图。在绘制另一个缓冲区时显示一个缓冲区。绘图完成后,交换两个缓冲区,以便正在查看的缓冲区现在用于绘图。
这就是造成两个不同方格效应之间奇怪变化的原因。