簡體   English   中英

如何從 python 浮點數列表創建 float32 類型的 PyGLM 數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM