编辑:rotoglup在我的代码中找到了问题,添加我已删除的着色器完成了解决方案。请参阅下面的答案获取正确的代码(包括着色器)。
大家好!
我正在尝试从这个教程学习一些现代OpenGL的基础知识。
我想使用Python/pyglet而不是C++来完成。我知道pyglet可以抽象掉很多低级别的OpenGL;但是,在将它们隐藏在抽象层之后,我想先了解一些基础知识。
我的问题非常简单:下面的代码只绘制一个点,而不是我期望的3个点。
就我所知,我的代码与教程中的C++代码相同,除了删除了顶点和片段着色器(通过Python中的gletools完成),但似乎对我的问题没有影响。
将事情简化为一个点显示出我不理解的行为(第一个坐标似乎是唯一影响任何东西的),使我相信我简单地未能理解关于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()