Графические сбои в PyOpenGL с PyGame - PullRequest
1 голос
/ 05 мая 2020

В настоящее время я программирую игру с PyOpenGL с PyGame, и при использовании Vertex Buffers возникают графические сбои. К сбоям относятся линии, которые рисуются между каждой моделью, хотя этого не должно быть. Я обнаружил, что переключение между 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)

1 Ответ

1 голос
/ 05 мая 2020

Если вы хотите использовать фиксированные атрибуты функции, вам необходимо включить возможности на стороне клиента, набрав glEnableClientState. Задавать вершины как glVertex3fv в al oop излишне. Указание вершины вне последовательности 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)
...