gpt4 book ai didi

c++ - glDrawElements 中的索引参数是什么意思?

转载 作者:行者123 更新时间:2023-11-30 02:28:22 25 4
gpt4 key购买 nike

有两个 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,但从外观上看,如果没有绑定(bind) EBO,指针将直接指向索引所在的位置,而不是 EBO。我是对的,这意味着它将指向系统 RAM 上的阵列吗? (编辑:我刚刚意识到这没有意义,如果指针位于 0x00000008,则它不能转到系统内存中的那个地址。)如果是这样,它是否每次都将索引数组复制到显卡为了能够使用它?谢谢。

最佳答案

根据 OpenGL 4.5,核心配置文件,不支持从客户端内存读取(§10.3.10 OpenGL 4.5 核心规范):

DrawElements, DrawRangeElements, and DrawElementsInstanced source their indices from the buffer object whose name is bound to ELEMENT_ARRAY_BUFFER, using their indices parameters as offsets into the buffer object in the same fashion as described in section 10.3.9. [...] If zero is bound to ELEMENT_ARRAY_BUFFER, the result of these drawing commands is undefined.

所以您创建 EBO 的方法是正确的。除非您的第 0 个索引位于偏移量零,否则第 3 个索引位于偏移量 3*sizeof(type)

至于你的第二个引文:在旧的 OpenGL 版本中,你可以传递一个指向客户端内存的指针(在你的进程虚拟地址空间中,而不是物理地址)并且让 ELEMENT_ARRAY_BUFFER 未绑定(bind)。

关于c++ - glDrawElements 中的索引参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40826924/

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