【问题标题】:Is there a clear performance difference between GL_QUADS and GL_TRIANGLE STRIP?GL_QUADS 和 GL_TRIANGLE STRIP 之间有明显的性能差异吗?
【发布时间】:2013-06-02 11:52:32
【问题描述】:

所以我一直在寻找我的程序的优化,我在徘徊是否使用 QUADS 是最有效的方法。我正在使用映射交错 VBO QUADS 顶点和 TEXTURE 坐标。

所以我想知道在使用以下其中一种而不是 QUADS 进行渲染时是否有明显的性能提升:

注意:这需要包括我使用纹理的事实!

  • TRIANGLE_STRIPS
  • 三角形
  • QUAD_STRIPS

哪个最快?

注意 2:我环顾四周,找不到明确的答案。

【问题讨论】:

  • TRIANGLE_STRIPS 和 TRIANGLES 之间存在差异。不太确定 QUAD_STRIPS 为什么不做一个小程序,它采用大量随机基元并绘制它们并查看性能。
  • 是的,但我想知道与 QUADS 相比是否有区别.. 制作该程序是个好主意,但我根本没有时间,所以我想看看我是否可以得到一个简短而好的答案:D

标签: java opengl rendering lwjgl vbo


【解决方案1】:
  • GL_QUAD_STRIP 已被弃用,并且在当前版本的 OpenGL 中不受支持,所以它已经过时了。另外,它无论如何也不会太快 - 请参阅 this post 了解为什么不再支持它(出于兼容性目的保存)。

  • GL_TRIANGLES 通常是一个不错的选择。它会比使用过时的功能更快。而且它在原则上也更快 - 无论如何,四边形都被分解成三角形,所以你可以通过在 CPU 端执行一次然后节省它必须做的 GPU 工作来节省一堆不必要的工作。三角形是指定形状的标准且完美的方式。

  • GL_TRIANGLE_STRIPGL_TRIANGLES 快,因为在指定第一个三角形之后指定每个三角形需要一个点,而不是三个。使用之前三角形的前两个顶点。你得到连接的三角形,但你也使用更少的内存。因为您必须阅读更少,所以您可以更快地处理。 而且 因为您的最后两个顶点刚刚在最后一个三角形中指定,所以它们将比可能来自谁知道在哪里的其他两个顶点更容易在内存中获取。还有一些技巧可以使用 degenerate 三角形条来实现三角形之间的无缝跳转。

如果您想要三者中的最佳性能,GL_TRIANGLE_STRIP 是不二之选。不幸的是,除非您的数据已经指定用于三角形带,否则您必须自己订购顶点并记住将退化三角形放在哪里。一个好的起点是高度图(即地形)。但是,首先优化代码的其他部分(例如,确定是否绘制对象)可能会更好地利用您的时间。而且我可能错了,我认为纹理的使用不会影响您对顶点规范的选择。

编辑:这是一个使用GL_TRIANGLE_STRIP渲染正方形的示例

顶点:(0,0) (0,1) (1,0) (1,1)

三角形 1:(0,0) (0,1) (1,0) (1,1)

三角形 2:(0,0) (0,1) (1,0) (1,1)

【讨论】:

  • 我有很多优化,面部剔除截锥剔除等。所以我正在寻找其他可以提供帮助的东西..
  • 你能给我举个例子,说明如何在 3D 中将 TRIANGLE_STRIP 渲染为 QUAD 吗?我似乎做错了
  • 四边形是什么意思?
  • 使用三角形尖头渲染 3D 正方形
  • 虽然:"GL_QUAD_STRIP 已被弃用,并且在当前版本的 OpenGL 中不受支持" 是真的(至少对于核心上下文而言),但:"You必须使用 glBegin 和 glEnd 才能使用该功能” 当然不是。给定一个兼容性上下文(无论如何你都需要弃用的东西),没有人阻止你混合弃用的东西(如GL_QUAD_STRIP)和非弃用的东西(如VBO)。虽然远离过时的东西的一般建议当然是好的,但这种说法是完全错误的。按照这种逻辑,他也必须使用glBegin/glEnd 作为他的GL_QUADS
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2010-10-25
  • 2014-02-05
  • 2018-09-09
  • 1970-01-01
相关资源
最近更新 更多