gpt4 book ai didi

ios - OpenGL ES : Should I use DrawElements for a TRIANGLE_STRIP array?

转载 作者:行者123 更新时间:2023-11-29 00:34:29 25 4
gpt4 key购买 nike

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

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

这是我正在绘制的三角形图: enter image description here

如您所见,因为我使用的是 TRIANGLE_STRIP,所以没有重复,那么索引它有什么好处吗?

最佳答案

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

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

  • 不仅您的 3D 模型更小、消耗的内存更少,而且将其加载到显卡内存中的速度也更快。因此,更少的内存意味着更少的内存传输。

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

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

关于ios - OpenGL ES : Should I use DrawElements for a TRIANGLE_STRIP array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943488/

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