openGL básico, buffers de vértices e pyglet
Edit: rotoglup encontrou os problemas no meu código, adicionando os shaders que eu removi completaram a solução. Veja minha resposta abaixo para o código correto (com shaders).
Olá a todos !
Estou tentando aprender alguns conceitos básicos do OpenGL moderno deeste tutorial.
Eu gostaria de fazê-lo com python / pyglet em vez de C ++. Eu sei que o pyglet pode abstrair muito do OpenGL de baixo nível; Eu quero entender alguns dos princípios básicos antes de passar a escondê-los atrás de camadas de abstração.
Meu problema é extremamente simples: o código abaixo apenas desenha um ponto em vez dos 3 que eu estou esperando. Meu código é, tanto quanto posso dizer, idêntico ao C ++ no tutorial, exceto pela remoção de sombreadores de vértices e fragmentos (feitos viagletools em python), o que parece não fazer diferença para o meu problema.
Simplificar as coisas em um único ponto mostra o comportamento que eu não entendo (a primeira coordenada parece ser a única que afeta alguma coisa), levando-me de volta à minha crença de que simplesmente não consegui entender algo muito básico sobre pyglet, OpenGL, ou mesmo 3D em geral: p
Aqui está o código relevante:
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()