[英]How to convert array([array([ …],type=float32)],[array([ …],type=float32)]) to array([…],[…])?
[英]How to create a PyGLM array of float32 type from a list of python floats
我有這個 function 來修改它:
def buffers_init_pnt() -> None:
global mPoints
global POINTS_VAOID
global POINTS_VBOID
global glmverts_pnt_init
floatlist = []
for item in sphere_nodes:
floatlist.append(float(item[1]))
floatlist.append(float(item[2]))
floatlist.append(float(item[3]))
glmverts_pnt_001 = glm.array(glm.float32,
float(item[1]), float(item[2]), float(item[3])
)
mPoints.append(Point(glmverts_pnt_001, POINTS_VAOID, POINTS_VBOID))
buf = struct.pack('%sf' % len(floatlist), *floatlist)
#I would like to create a glm array of float32 type from the list floatlist
#glmtest = glm.array(glm.float32, 0.0, 0.0, 0.0)
#glmtest = glm.array.from_bytes(buf)
#glmtest.dtype = glm.float32
POINTS_VAOID = gl.glGenVertexArrays(1)
POINTS_VBOID = gl.glGenBuffers(1)
gl.glBindVertexArray(POINTS_VAOID)
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, POINTS_VBOID)
gl.glBufferData(gl.GL_ARRAY_BUFFER, glmverts_pnt_init.nbytes, None, gl.GL_DYNAMIC_DRAW)
gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 3 * glm.sizeof(glm.float32), None)
gl.glEnableVertexAttribArray(0)
我知道有一個 from_bytes() 但是我嘗試使用它並且 dtype 顯示 Uint8 並且我無法更改它因為它被寫保護了。 有沒有辦法從 python 浮點數的常規列表創建 glm 數組?
創建一個ctypes
數組:
import ctypes
floatArray = (ctypes.c_float * len(floatlist))(*floatlist)
這個數組可以直接與 PyOpenGLs glBufferData
重載一起使用:
gl.glBufferData(gl.GL_ARRAY_BUFFER, floatArray, gl.GL_DYNAMIC_DRAW)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.