我正在尝试使用glfw
上下文与pyopengl
创建一个简单的框架来呈现2D环境。我的问题是,一旦我引入了移动的物体,屏幕就会变得杂乱,上面有一个物体在框架中的“阴影”。
我怀疑我必须清除某些缓冲区以重置屏幕,但我唯一能看到任何缓冲区是glfw.swap_buffers()
调用。
简而言之,我甚至迷失在哪里,作为一个自学成才的“现代”opengl用户,我甚至无法分辨哪些gl-fuctions被弃用。
我的平局电话:
def triggerRedraw(self):
shaders.glUseProgram(self.completeShader)
try:
self.vbo.bind()
try:
glUniformMatrix4fv(self.cameraMatrixPointer, 1, True, self.cameraMatrix)
glEnableVertexAttribArray(self.vertexPositionPointer)
glEnableVertexAttribArray(self.vertexColorPointer)
stride = 5*4
glVertexAttribPointer(self.vertexPositionPointer, 2, GL_FLOAT, False, stride, self.vbo)
glVertexAttribPointer(self.vertexColorPointer, 3, GL_FLOAT, False, stride, self.vbo+8)
glDrawArrays(GL_TRIANGLES, 0, 6)
finally:
self.vbo.unbind()
glDisableVertexAttribArray(self.vertexPositionPointer)
glDisableVertexAttribArray(self.vertexColorPointer)
finally:
shaders.glUseProgram(0)
# Swap front and back buffers
glfw.swap_buffers(self.window)
# Poll for and process events
glfw.poll_events()
我在主循环中切换整个VBO,然后调用triggerRedraw
使对象移动。我观察到它首先填充前缓冲区,然后填充后缓冲区,这样我在第3帧上看到2个重叠的对象而不是第1帧,第5帧中有3个对象,依此类推。
如何阻止这种情况发生?