使用PyGame的PyOpenGL中的图形故障

2024-10-03 09:13:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用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)


Tags: in模型图形fordef故障vertexlines
1条回答
网友
1楼 · 发布于 2024-10-03 09:13:13

如果要使用固定函数属性,则必须通过^{}启用客户端功能。 在循环中通过glVertex3fv指定顶点是多余的。在glBegin/glEnd序列之外指定顶点会导致未定义的行为。
^{}的最后一个参数是顶点坐标数:

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)

相关问题 更多 >