我无法弄清楚glDrawElements无法正常工作的原因。我已经成功使用了glDrawArrays。但是,当我尝试使用glDrawElements绘制时,它无效。
我正在关注使用python中的learnopengl.com网站的教程,所以它增加了一些令人头疼的问题。知道为什么这不起作用吗?我已经看了将近一天,但却无法以我的方式看到错误。
Update A set score1=B.scoreA
,score2=B.scoreB
,score3=B.scoreC
From TableA A
Join TableB B on A.identifier = B.identifier
答案 0 :(得分:2)
这段代码中有两个棘手的问题需要解决,它们都是微妙的,特定于python的。
首先,您应该将0
中的glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0)
替换为None
。我怀疑这是因为PyOpenGL使用ctypes来包装OpenGL,并且None
建议根据ctypes documentation来表示NULL
指针。如果以后需要为缓冲区使用偏移量,则应查看this answer。
其次,如果您只是执行第1步并运行代码,您可能会发现输出不符合您的预期:
我们的橙色矩形怎么了?那么,这里的问题是我们传递给缓冲区对象的数据。如果您使用的是64位设备,如果未完全指定,则numpy数据类型(dtype)也将为64位。 OpenGL需要32位浮点数和整数而不是双精度数,因此我们需要使用np.float32
。为了保持一致性,我还会使用np.uint32
作为索引缓冲区,但这不是绝对必要的。如果我们将verts
和indices
初始化语句修复为:
verts = np.array([[-0.5, 0.5, 0.0], [-0.5, -0.5, 0.0], [0.5, -0.5, 0.0], [0.5, 0.5, 0.0]], dtype=np.float32)
indices = np.array([[0, 1, 3], [3, 1, 2]], dtype=np.uint32)
结果应该更符合您的期望:
希望这有帮助!