PyOpenGL 中的图形故障 PyGame
Graphical Glitches in PyOpenGL with PyGame
我目前正在使用 PyGame 使用 PyOpenGL 编写游戏,当使用顶点缓冲区时,会出现图形故障。故障包括在不应该的情况下在每个模型之间绘制线条。我发现在大多数情况下,在 Ground() 和 GroundVBO() 之间交替不会导致任何图形故障。有什么我遗漏的吗?
global vbo
vbo = 0
def Ground():
glBegin(GL_LINES)
for edge in ground_edges:
for vertex in edge:
glVertex3fv(ground_verticies[vertex])
glEnd()
def GroundVBO():
for edge in ground_edges:
for vertex in edge:
ground_noot = glVertex3fv(ground_verticies[vertex])
vbo = glGenBuffers(1)
glBindBuffer (GL_ARRAY_BUFFER, vbo)
glBufferData (GL_ARRAY_BUFFER, len(ground_verticies)*4, ground_noot, GL_STATIC_DRAW)
glVertexPointer (3, GL_FLOAT, 0, None)
glDrawArrays(GL_LINES, 0, 300)
如果要使用固定功能属性,则必须通过glEnableClientState
启用客户端功能。
在循环中通过 glVertex3fv
指定顶点是多余的。在 glBegin
/glEnd
序列之外指定顶点会导致未定义的行为。
glDrawArrays
的最后一个参数是顶点坐标的个数:
def GroundVBO():
vbo = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, len(ground_verticies)*4, ground_noot, GL_STATIC_DRAW)
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, 0, None)
glDrawArrays(GL_LINES, 0, len(ground_verticies))
glDisableClientState(GL_VERTEX_ARRAY)
我目前正在使用 PyGame 使用 PyOpenGL 编写游戏,当使用顶点缓冲区时,会出现图形故障。故障包括在不应该的情况下在每个模型之间绘制线条。我发现在大多数情况下,在 Ground() 和 GroundVBO() 之间交替不会导致任何图形故障。有什么我遗漏的吗?
global vbo
vbo = 0
def Ground():
glBegin(GL_LINES)
for edge in ground_edges:
for vertex in edge:
glVertex3fv(ground_verticies[vertex])
glEnd()
def GroundVBO():
for edge in ground_edges:
for vertex in edge:
ground_noot = glVertex3fv(ground_verticies[vertex])
vbo = glGenBuffers(1)
glBindBuffer (GL_ARRAY_BUFFER, vbo)
glBufferData (GL_ARRAY_BUFFER, len(ground_verticies)*4, ground_noot, GL_STATIC_DRAW)
glVertexPointer (3, GL_FLOAT, 0, None)
glDrawArrays(GL_LINES, 0, 300)
如果要使用固定功能属性,则必须通过glEnableClientState
启用客户端功能。
在循环中通过 glVertex3fv
指定顶点是多余的。在 glBegin
/glEnd
序列之外指定顶点会导致未定义的行为。
glDrawArrays
的最后一个参数是顶点坐标的个数:
def GroundVBO():
vbo = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, len(ground_verticies)*4, ground_noot, GL_STATIC_DRAW)
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, 0, None)
glDrawArrays(GL_LINES, 0, len(ground_verticies))
glDisableClientState(GL_VERTEX_ARRAY)