【发布时间】:2016-11-27 08:03:00
【问题描述】:
有两个 OpenGL 文档页面对 glDrawElements 函数的“索引”参数的描述略有不同。在 www.opengl.org/sdk/docs/man4/ 上它说:
indices
Specifies a pointer to the location where the indices are stored.
在 www.khronos.org/opengles/sdk/docs/man3 上它说:
indices
Specifies a byte offset (cast to a pointer type) into the buffer bound
to GL_ELEMENT_ARRAY_BUFFER to start reading indices from. If no buffer
is bound, specifies a pointer to the location where the indices are stored.
顺便说一句,我在 Windows 上,使用 OpenGL 4+。
所以我已经将我的索引数组复制到我创建的元素缓冲区对象中,我需要提供的索引指针参数是第一个索引的字节偏移量吗?因此,如果我想从索引 3 开始绘制,参数将是 2 * sizeof(GLuint),转换为指针?
我实际上为此努力创建了一个 EBO,但从它的外观来看,如果没有绑定 EBO,则指针直接指向索引所在的位置,而不是 EBO。我是对的,这意味着它将指向系统 RAM 上的阵列吗? (编辑:我刚刚意识到这没有意义,如果指针位于 0x00000008 它不能转到系统内存中的那个地址。)如果是这样,它是否每次都将索引数组复制到显卡为了能够使用它?谢谢。
【问题讨论】:
-
indices:索引数组的基地址。您应该只提供基地址。第三个参数指定每个索引的大小。它通常设置为 GL_UNSIGNED_INT
-
@Asesh 谢谢,我想我明白了。但它表示如果元素缓冲区对象未绑定,则索引指针直接指向存储索引数组的位置。这让我觉得系统 RAM,但这没有意义,它不是总是从 GPU 上的元素缓冲区对象获取索引吗?好困惑。
标签: c++ arrays opengl indexing graphics