0

是否可以将缓冲区获取到可读数组?即当我打电话给他们或打印他们时,只显示。如何将缓冲区对象的值获取到 python 数组?

4

1 回答 1

0

有不同的可能性。一种可能性是使用glGetBufferSubData. 帧缓冲区对象的数据可以通过 读取glReadPixels,如果缓冲区被绑定为读取 ( GL_READ_FRAMEBUFFER)。可以读取纹理glGetTexImage。通常,缓冲区可以通过缓冲区映射( glMapBuffer/ glMapBufferRange) 访问。

例如,您可以使用glGetBufferSubData读取浮点值来读取 a 的数据GL_ARRAY_BUFFER。在下面的示例vbo中是一个顶点缓冲区对象,并且no_of_floats是您要读取的浮点数。

glGetBufferSubData返回一个字节数组。您可以使用numpy将字节数组转换为浮点数组:

import numpy as np
glBindBuffer(GL_ARRAY_BUFFER, vbo)
uint8_data = glGetBufferSubData(GL_ARRAY_BUFFER, 0, no_of_floats * 4)
float32_data = np.frombuffer(uint8_data, dtype=np.float32)

另一种选择是生成一个ctypes数组并将数据直接读入数组:

import ctypes
float32_data = (ctypes.c_float * no_of_floats)() # or (GLfloat * no_of_floats)()
void_ptr = ctypes.c_void_p(ctypes.addressof(float32_data))

glBindBuffer(GL_ARRAY_BUFFER, vbo)
glGetBufferSubData(GL_ARRAY_BUFFER, 0, no_of_floats * 4, void_ptr)
于 2020-06-01T08:35:40.410 回答