basic openGL, вершинные буферы и пиглет

Edit: rotoglup обнаружил проблемы в моем коде, добавив шейдеры, которые я удалил, завершило решение. Правильный код (с шейдерами) см. В моем ответе ниже.

Привет всем!

Я ' Я пытаюсь изучить основы современного OpenGL из этого руководства .

Я бы хотел сделать это с помощью python / pyglet вместо C ++. Я знаю, что пиглет может абстрагировать большую часть низкоуровневого OpenGL; Я хочу понять некоторые основы, прежде чем переходить к их сокрытию за слоями абстракции.

Моя проблема чрезвычайно проста: приведенный ниже код рисует только одну точку вместо трех, которые я ожидал. Насколько я могу судить, мой код идентичен C ++ в руководстве, за исключением удаления вершинных и фрагментных шейдеров (выполняется с помощью gletools в python), что, похоже, не имеет значения для моих

Упрощение вещей до одной точки показывает поведение, которое я не понимаю (первая координата, кажется, единственная, которая влияет на что-либо), что возвращает меня к моему убеждению, что я просто не смог понять чего-то очень простого. либо pyglet, либо OpenGL, либо даже 3D в целом: p

Вот соответствующий код:

import pyglet
from pyglet.gl import *

window = pyglet.window.Window()

positionBufferObject = GLuint()
vao = GLuint()

vertexPositions = [0.0, 0.0, 0.0,
                   0.25, 0.0, 0.0,
                   1.75, 1.75, 0.0]

vertexPositionsGl = (GLfloat * len(vertexPositions))(*vertexPositions)

@window.event
def on_draw():
    glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject)
    glEnableVertexAttribArray(0)
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0)
    glDrawArrays(GL_POINTS, 0, 3)
    glDisableVertexAttribArray(0)

glGenBuffers(1, positionBufferObject)
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject)
glBufferData(GL_ARRAY_BUFFER, len(vertexPositionsGl)*4, vertexPositionsGl, GL_STATIC_DRAW)
glBindBuffer(GL_ARRAY_BUFFER, 0)

glClearColor(0.0, 0.0, 0.0, 0.0)
pyglet.app.run()

6
задан Nicolas Lefebvre 7 January 2011 в 11:14
поделиться