- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试将索引加载到 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/
当创建一个 Buffer 并设置它的数据时,需要先将它绑定(bind)到一个 target,然后用一些数据填充绑定(bind)到该 target 的缓冲区: GLenum target = GL_AR
我想知道,如果我使用 glBufferData,它会在我调用它时准确地分配内存吗(也就是说,如果 size 参数大于此时的可用内存,它会崩溃)还是会它有某种特殊的即时规则,仅当我实际将数据复制到缓冲区
我所说的标志是 GL_STREAM_DRAW、GL_STATIC_DRAW 和 GL_DYNAMIC_DRAW。 The manual page is clear about when you sho
我尝试将索引加载到 GL_ELEMENT_ARRAY_BUFFER 中,但是当我尝试此操作时,它会用 0 分隔我的数据。 例如我加载了这些数据: [0 1 3 3 1 2] 使用函数glBufferD
我在 glBufferData 上有随机崩溃,它只发生在 Windows 上。 Mac OS 和 Linux 没有问题。这是我的上传功能,它将我保存在内存中的所有内容上传到 GPU。 vertex 是
我刚刚注意到,当我尝试使用大小:1085859108 和数据:NULL 调用 glBufferData 时,它会无提示地失败。 以下对 glBufferSubData 的调用失败并出现 OUT_OF_
我正在使用明确定义的顶点坐标数组创建 glBufferData,一切正常。使用未明确定义的数组时,结果完全不同,尽管我使用的是相同的坐标值。绘制调用以不同的顶点顺序渲染事物。 顶点是三角形网格。 代码
我正在尝试移植我的固定功能管线 openGL 代码以使用 GLSL,但我遇到了 glBufferData 的段错误。这一切都与固定功能的东西一起工作得很好(即我可以毫无问题地渲染加载的网格)。 这是加
This question询问是否可以依靠编译器不弄乱 struct 的值顺序和填充。 根据该问题的答案, OpenGL defines, very clearly, what the byte la
我不明白为什么这段代码会出现段错误: AxesMarker::AxesMarker(float size) : size_(size), vbo_vertices_(0), vbo_eleme
我正在使用 OpenGL实现某种批量绘图。为此,我创建了一个 vertex buffer来存储数据。 注意:这个缓冲区通常会在每一帧上更新,但永远不会减少大小(但仍然可以增加)。 我的问题是:使用 g
我正在使用 glBufferData 来保存一些渲染信息。 glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertic
在开发过程中,我注意到一个奇怪的“错误”,它只能在 Android 模拟器上重现。我正在使用具有 GPU 加速功能的 x86 版本。请查看以下代码: public class TestRenderer
我正在浏览 OGLdev教程,而且我一直坚持让顶点数组对象工作。相关代码如下: glBindBuffer(GL_ARRAY_BUFFER, buffers[POS_VB]); FloatBuffer
我有这段代码,它不起作用我不知道为什么,我认为它应该,但似乎第一个缓冲区数据被第二个缓冲区数据替换了。我想要实现的是第一个线条粗细与另一个不同, vector vert={-.4,.2,-.2,.6}
这个问题在这里已经有了答案: Can I delete a float array when I have used glBufferData? (2 个答案) When does OpenGL g
我有一个关于 OpenGL glBufferData() 方法的问题。我能否在 std::vector 、std::list 等结构中传递顶点数据,或者它必须是经典的 ( [] ) 数组? 最佳答案
在渲染器的初始化中,VBO被创建并绑定(bind)到GL_ARRAY_BUFFER或GL_ELEMENTS_ARRAY_BUFFER,第一个有三个顶点。调用glBufferData将这三个顶点的属性缓
我创建了一个顶点缓冲区对象类来管理应用程序中的大量顶点。用户调用构造函数创建一个glBuffer,调用glBufferData分配指定大小的空间。 有一个名为 resize 的类函数,允许用户通过再次
我是 OpenGL 的初学者,我正在尝试绘制一个彩色方 block ,我遵循了 OpenGL Book 上的教程。我正在使用示例绘制 here .因为这绘制了一个三角形,所以我修改了代码以绘制 4 个
我是一名优秀的程序员,十分优秀!