我有一段看起来非常丑陋的小代码,每当我试图用 pyglet 绘制数组时,我似乎都会继续使用它,形式如下:
vertPoints = someArray.flatten().astype(ctypes.c_float)
vertices_gl = vertPoints.ctypes.data_as(ctypes.POINTER(ctypes.c_float))
我根据使用 numpy 和 pyglet 找到的少量资源拼凑而成。有没有更优雅的方法来获取指向 numpy 数组的指针作为 c_floats?
这是我写的一个小例子的上下文中的代码:
import numpy as np; import ctypes
import pyglet; import pyglet.gl as gl
def drawArray(someArray):
vertPoints = someArray[:,:2].flatten().astype(ctypes.c_float)
vertices_gl = vertPoints.ctypes.data_as(ctypes.POINTER(ctypes.c_float))
vertColors = someArray[:,2:].flatten().astype(ctypes.c_float)
colors_gl = vertColors.ctypes.data_as(ctypes.POINTER(ctypes.c_float))
gl.glVertexPointer(2, gl.GL_FLOAT, 0, vertices_gl)
gl.glColorPointer(3, gl.GL_FLOAT, 0, colors_gl)
gl.glDrawArrays(gl.GL_POINTS, 0, len(vertPoints) // 2)
window = pyglet.window.Window(400,400)
@window.event
def on_draw():
gl.glPointSize(10.0)
gl.glEnable(gl.GL_POINT_SMOOTH)
gl.glEnable(gl.GL_BLEND)
gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
gl.glEnableClientState(gl.GL_VERTEX_ARRAY)
gl.glEnableClientState(gl.GL_COLOR_ARRAY)
points = np.random.random((50,5))*np.array([400,400,1,1,1])
drawArray(points)
pyglet.app.run()