OpengL我的广场在哪里?

时间:2018-04-01 02:13:57

标签: python opengl pyopengl

我无法弄清楚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 

1 个答案:

答案 0 :(得分:2)

这段代码中有两个棘手的问题需要解决,它们都是微妙的,特定于python的。

首先,您应该将0中的glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0)替换为None。我怀疑这是因为PyOpenGL使用ctypes来包装OpenGL,并且None建议根据ctypes documentation来表示NULL指针。如果以后需要为缓冲区使用偏移量,则应查看this answer

其次,如果您只是执行第1步并运行代码,您可能会发现输出不符合您的预期:

enter image description here

我们的橙色矩形怎么了?那么,这里的问题是我们传递给缓冲区对象的数据。如果您使用的是64位设备,如果未完全指定,则numpy数据类型(dtype)也将为64位。 OpenGL需要32位浮点数和整数而不是双精度数,因此我们需要使用np.float32。为了保持一致性,我还会使用np.uint32作为索引缓冲区,但这不是绝对必要的。如果我们将vertsindices初始化语句修复为:

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)

结果应该更符合您的期望:

enter image description here

希望这有帮助!