如何从Python浮点数列表创建float32类型的PyGLM数组
如何直接从Python浮点数列表创建float32类型的PyGLM数组?
你的需求可以直接通过PyGLM的array构造器实现,不需要借助from_bytes()方法。直接将浮点数列表展开传入glm.array(glm.float32, ...)即可生成指定类型的数组。
以下是修改后的buffers_init_pnt函数:
def buffers_init_pnt() -> None: global mPoints global POINTS_VAOID global POINTS_VBOID global glmverts_pnt_init floatlist = [] for item in sphere_nodes: x, y, z = float(item[1]), float(item[2]), float(item[3]) floatlist.extend([x, y, z]) glmverts_pnt_001 = glm.array(glm.float32, x, y, z) mPoints.append(Point(glmverts_pnt_001, POINTS_VAOID, POINTS_VBOID)) # 直接从floatlist创建float32类型的PyGLM数组 glmverts_pnt_init = glm.array(glm.float32, *floatlist) 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, glmverts_pnt_init.ptr, gl.GL_DYNAMIC_DRAW) gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 3 * glm.sizeof(glm.float32), None) gl.glEnableVertexAttribArray(0)
关键修改说明:
- 用
glm.array(glm.float32, *floatlist)直接生成目标类型数组,跳过struct.pack转字节再反向解析的冗余步骤 - 优化循环内变量提取逻辑,用
extend简化列表追加操作 - 修正
glBufferData参数,传入glmverts_pnt_init.ptr作为数据指针(原代码传None会导致无有效数据上传到GPU)
内容的提问来源于stack exchange,提问作者prusso
相关产品推荐
相关产品推荐

