gpt4 book ai didi

python - glBufferData 用0分隔数据

转载 作者:行者123 更新时间:2023-12-01 00:34:18 28 4
gpt4 key购买 nike

我尝试将索引加载到 GL_ELEMENT_ARRAY_BUFFER 中,但是当我尝试此操作时,它会用 0 分隔我的数据。

例如我加载了这些数据:

[0 1 3 3 1 2]

使用函数glBufferData(查看下面的代码示例)。当我使用 glGenBufferSubData 请求缓冲区中的数据时,该函数返回以下内容:

[0 0 1 0 3 0 3 0 1 0 2 0]. 
def __bindIndicesBuffer__(self, indices):
vboID = glGenBuffers(1)
self.vbos.append(vboID)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboID)
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 12, numpy.array(indices, dtype = numpy.int16), GL_STATIC_DRAW)
print(glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, 12))

在函数 glBufferData 中,我必须保留 12 个字节的数据,这很奇怪,因为我只有 6 个数字。有人知道发生了什么事吗?

最佳答案

In the function glBufferData I have to reserve 12 bytes of data, which is weird because I only have 6 numbers [...]

当然,你们每个数字都是int16类型,这意味着每个数字有16位,分别有2个字节(1个字节有8位)。 6个2字节的数字需要12字节的内存。由于glBufferData中的大小参数是以字节为单位的大小,参数必须为 12。

<小时/>

[...] when I try this it separates my data with 0's [...]

glGetBufferSubData读取缓冲区的字节值并返回 uint8 值数组。因此,12 个字节中的每一个都被视为一个单独的 8 位 (unit8) 值,这就是打印的内容。

如果您想获取“原始”int16 值,那么您必须通过 numpy.frombuffer 重新解释数组

uint8_data = glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, 12)
int16_data = numpy.frombuffer(uint8_data, dtype=numpy.int16)
print(int16_data)

或者,您可以将指向 int16 数组的数据指针视为 unit8 数据指针(请参阅 numpy.ndarray.ctypes):

int16_data = numpy.empty([6], dtype=numpy.int16)
unit8_ptr = int16_data.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, 12, unit8_ptr)
print(int16_data)

关于python - glBufferData 用0分隔数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com