You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:40:26