编辑: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()