我需要把我的程序从glVertex
修改为glDrawArrays
,我正在尝试用这个函数来整理。你能解释一下为什么这个代码不起作用,以及如何改变它,所以它画了两个三角形?在
import pyglet
import pyglet.gl as pgl
win = pyglet.window.Window(1300, 1000, resizable=True)
@win.event
def on_draw():
array = [100, 100, 0,
500, 300, 0,
900, 100, 0,
100, 300, 0,
500, 500, 0,
900, 300, 0]
pgl.glClearColor(0.3, 0.3, 0.3, 0.0)
pgl.glEnableClientState(pgl.GL_VERTEX_ARRAY)
pgl.glVertexPointer(3, pgl.GL_FLOAT, 18, (pgl.GLubyte * len(array))(*array))
pgl.glDrawArrays(pgl.GL_TRIANGLES, 0,18)
pgl.glDisableClientState(pgl.GL_VERTEX_ARRAY)
pyglet.app.run()
缓冲区中的数据类型必须与顶点数据数组由^{} 定义时指定的类型相对应。
由于集合类型是
GL_FLOAT
,数组数据必须是GLfloat
类型:^{} (和类似函数)的第三个参数(}必须是3*4=12。
^{pr2}$stride
)指定连续属性之间的字节偏移量。因为每个顶点由3个分量(x,y,z)组成,一个分量的大小是
GLfloat
,所以{由于缓冲区是紧压缩的,
stride
也可以设置为0。这是glVertexPointer
(和类似函数)提供的特殊情况。如果stride
设置为0,它将由size
和type
参数自动计算。在最终代码:
相关问题 更多 >
编程相关推荐