Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 德国劳埃德船级社要素参数的澄清_Opengl_Opengl 3 - Fatal编程技术网

Opengl 德国劳埃德船级社要素参数的澄清

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

我很难将OpenGL规范(第27页)与互联网上常见的示例用法相匹配

OpenGL规范3.1版规定了抽屉元件:

命令

    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]