ピグレットで配列を描画しようとするときはいつでも、次の形式の非常に醜い小さなコードのように見えるものがあります。
vertPoints = someArray.flatten().astype(ctypes.c_float)
vertices_gl = vertPoints.ctypes.data_as(ctypes.POINTER(ctypes.c_float))
これは、numpy と pyglet を使用して見つけたいくつかのリソースに基づいてまとめました。c_floats として numpy 配列へのポインターを取得するよりエレガントな方法はありますか?
私が書いた小さな例のコンテキストでの上記のコードは次のとおりです。
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()