1

我正在尝试绘制一个简单的三角形数组。它们都是连接的,所以我目前正在使用 DrawArrays 和 GL_TRIANGLE_STRIP。但是,在检查 XCode 分析器时,它建议改用 DrawElements 和索引数组。

我真的应该这样做吗?我注意到 DrawElements 也有 TRIANGLE_STRIP 的选项,但我没有看到优势,因为当我使用 glDrawArrays 时没有任何重复的顶点。

这是我正在绘制的三角形的图表: 在此处输入图像描述

正如你所看到的,我使用 TRIANGLE_STRIP 时没有重复,那么索引这个有什么优势吗?

4

1 回答 1

1

通常glDrawElements更快,但在您的情况下(只有两行顶点)它不会影响性能并且glDrawElements可能会更慢,因为您还必须处理索引缓冲区。

在其他一些情况下,如果您有三行或更多行顶点,您将开始有顶点重复,您应该使用glDrawElements并索引您的顶点缓冲区。索引的优点是:

  • 不仅您的 3D 模型更小并且消耗更少的内存,而且将其加载到显卡内存中变得更快。所以更少的内存也意味着更少的内存传输。

  • 如果您的着色器很复杂并且操作过多,则索引可能会对性能产生积极影响。事实上,如果您正在索引顶点,则无需多次重新计算同一顶点的结果。结果被计算一次,缓存并在另一个索引指向同一顶点时再次使用。

  • 当你有一个可变形的对象(即顶点的位置由于物理碰撞而改变)时,索引会有所帮助。假设您没有索引,您将为每个三角形重复相同的顶点(位置)。所以如果你想改变顶点的位置来模拟碰撞,你必须更新所有三角形的顶点位置。但是,如果您索引顶点缓冲区,则只需更改顶点的位置并保持索引缓冲区相同。

于 2016-12-06T17:55:34.000 回答