0

我很难将 OpenGL 规范(版本 3.1,第 27 页)与整个互联网上的常见示例用法相匹配。

DrawElements 的 OpenGL 规范版本 3.1 状态:

命令

    void DrawElements(enum mode, sizei count, enum type, void *indices);

通过在由索引定义的偏移量处将其索引存储在当前绑定的元素数组缓冲区(参见第 2.9.5 节)中的计数元素连续传输到 GL 来构造几何图元序列。DrawElements 传输的第 i 个元素将从每个启用数组的元素索引 [i] 中获取。

我倾向于这样解释:

indices 参数至少保存类型type的数值。它的元素用作实际元素缓冲区的偏移量。由于对于 DrawElements 的每次使用,当前都必须绑定一个元素缓冲区,因此我们实际上在这里有 2 组强制性索引:一个在元素缓冲区中,另一个在索引数组中。

在大多数情况下,这似乎有点浪费。除非必须绘制一个使用元素数组缓冲区定义的模型,但由于透明度等原因需要将其元素从前排序。但是我们将如何实现使用普通元素数组缓冲区(无排序)进行渲染而不是?

现在,很奇怪,互联网上的大多数示例和教程(此处此处为“索引绘图”的下半页。)给出了一个整数作为索引参数,大多为 0。有时 (void*)0。它总是只有一个整数偏移量 - 显然没有索引参数的数组!

我已经成功地使用了最后一个变体(为indices提供单个指针整数)和一些 NVIDIA 图形。但是我在英特尔板载芯片上遇到崩溃。我想知道,谁错了:我,规范或成千上万的例子。DrawElements的正确参数和用法是什么?如果允许使用单个整数,这与规范有何关系?

4

1 回答 1

1
于 2013-05-29T17:26:48.553 回答