Opengl 德国劳埃德船级社要素参数的澄清
我很难将OpenGL规范(第27页)与互联网上常见的示例用法相匹配 OpenGL规范3.1版规定了抽屉元件: 命令Opengl 德国劳埃德船级社要素参数的澄清,opengl,opengl-3,Opengl,Opengl 3,我很难将OpenGL规范(第27页)与互联网上常见的示例用法相匹配 OpenGL规范3.1版规定了抽屉元件: 命令 void DrawElements(enum mode, sizei count, enum type, void *indices); 通过连续传输几何图元来构造几何图元序列 对索引存储在当前绑定元素数组中的元素进行计数 缓冲区(见第2.9.5节)位于总账索引定义的偏移处。付款人转移的第i个元素将取自的元素索引[i] 每个已启用的阵列 我倾向于这样解释: Indexes
void DrawElements(enum mode, sizei count, enum type, void *indices);
通过连续传输几何图元来构造几何图元序列
对索引存储在当前绑定元素数组中的元素进行计数
缓冲区(见第2.9.5节)位于总账索引定义的偏移处。付款人转移的第i个元素将取自的元素索引[i]
每个已启用的阵列
我倾向于这样解释:
Indexes参数至少保存类型为的计数值。其元素用作实际元素缓冲区的偏移量。因为对于每个抽屉元素的使用,当前必须绑定元素缓冲区,所以这里实际上有两个必须的索引集:一个在元素缓冲区中,另一个在索引数组中
在大多数情况下,这似乎有些浪费。除非必须绘制一个模型,该模型使用元素数组缓冲区定义,但由于透明度等原因,需要将其元素前后排序。但是,我们如何使用普通元素数组缓冲区(无排序)进行渲染呢
现在,奇怪的是,互联网上的大多数示例和教程(,半页下的“索引绘图”)都给出了一个整数作为索引参数,大部分是0。有时(void*)0。它总是只有一个整数偏移-显然索引参数没有数组
我已经在一些NVIDIA图形中成功地使用了最后一个变量(为索引提供一个单点化整数)。但我在英特尔板载芯片上遇到崩溃。我想知道,谁错了:我,规范还是成千上万的例子。抽屉元素的正确参数和用法是什么?如果允许使用单个整数,那么这与规范有什么关系?您正在被OpenGL-1.1以来遗留的GLDrawerElements绊倒。当时没有VBO,只有客户端数组,程序实际上会将一个指针(=C术语中的数组)的索引输入到带有gl…pointer函数的缓冲区/数组集中 现在,对于索引缓冲区,参数实际上只是服务器端缓冲区的一个偏移量。您可能对这个问题非常感兴趣: 我也给出了详尽的答案,我强烈推荐阅读
我写的关于函数签名和类型转换的内容也适用于glDraw…调用。我感谢您的回答。你能给一些官方参考提供一个链接,说明行为已经改变(并且会将GL规范标记为false)?@user492238:规范没有错。如果你带着一些错误的预期阅读,可能会有点误导。它明确指出“索引以索引定义的偏移量存储在当前绑定的元素数组缓冲区中(见第2.9.5节)”,然后继续提到索引[i],即规范使用的类C语法中的索引+i,即字节偏移量索引+sizeof(类型)*我在缓冲区里。如果规范在旁注或其他东西中指出这种奇怪的行为,我会节省几个小时,而且会更快乐。另外,如果
索引
是指针,索引+i
看起来非常像索引[i]