我尝试将索引加载到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个数字。有人知道发生了什么事吗
当然,你们每个人的数字都是} 中的size参数是以字节为单位的大小,所以该参数必须是12
int16
类型,这意味着每个数字分别有16位和2个字节(1个字节有8位)。6个2字节的数字需要12字节的内存。因为^{^{} 读取缓冲区的字节值并返回
uint8
值数组。因此,12个字节中的每个字节都被视为一个单独的8位(unit8
)值,这就是打印的内容如果您想获得“原始”} 重新解释数组
int16
值,那么您必须通过^{或者,可以将指向} ):
int16
数组的数据指针视为unit8
数据指针(请参见^{您给GL 6个数字,每个数字都是16位整数(
numpy.int16
),即每个数字占用2个字节。打印时,字节是单独打印的,因此可以看到12个单独的数字。您可以确认/尝试给出大于255的总帐编号,即它们的最高有效字节将不再为零同样有趣的是,这些数字似乎是用低端格式写的,即先写最低有效字节。所以如果你写
int16
300,你应该在单字节输出中看到[... 44 1 ...]
,因为44 + 1 * 256 = 300
相关问题 更多 >
编程相关推荐