OpenGL:使用GL_QUADS还是GL_TRIANGLES更有效率?

5
我知道OpenGL在新版本中已经弃用并且取消了GL_QUADS。听说这是因为现代GPU只使用三角形进行渲染,所以调用四边形会让GPU更加努力地将其拆分成两个三角形 (至少我听说是这样的,我对这个话题并不是很熟悉)。
我想知道是否最好(假设平均人的CPU相对于他们的GPU速度更快)将渲染四边形手动拆分成两个三角形或者让GPU自己处理。再次声明,我对OpenGL没有实际经验,因为我刚刚开始学习。我想知道哪种方法对大多数机器来说更好,以便我可以专注于其中一种渲染方法*. 谢谢。
*尽管如此,我可能会为了方便而采用“三角形方法”。

虽然单个CPU处理器可能比单个GPU处理器更快,但是由于GPU处理器数量众多,我想让GPU将问题分配到其所有处理器上会比自己处理要快得多。 - Jackson
即使每帧都要执行数千次,也需要这样做吗? - CoderTheTyler
如果四边形在帧之间没有变化,我猜在将计算转移到CPU之前不需要多少帧。无论如何,我认为你在纠结于微末问题。在大多数使用GL_QUADS的图形应用程序中,我打赌大部分计算是在其他地方完成的。 - Jackson
我倾向于这样做。即使没有剩余的东西,我总是试图挤出每一滴汁。但感谢您提供简要说明。 - CoderTheTyler
3
不应该进行过早的优化,始终依赖于性能分析结果。 - Kromster
1
请注意,GL_QUADS已从OpenGL 3+的glDrawElements及其相关函数中移除(比较OGL2OGL3的规范)。 - Stacker
2个回答

10
即使您提供的是OpenGL矩形,三角剖分也是由驱动程序在它到达GPU之前在CPU端完成的。现代GPU只接受三角形(还有线条和点),因此某些东西将进行三角剖分,无论是您还是驱动程序 - 不管它发生在哪里都并不重要。
如果您不重用顶点缓冲区,并且每次用矩形重新填充它们而不是每次用预三角化的三角形重新填充它们,则效率会降低(在这种情况下驱动程序将不得不重新对每个顶点缓冲区进行三角剖分),但这是相当牵强的(而且你应该解决的问题只是你正在重新填充你的顶点缓冲区)。
如果可以选择,最好使用三角形,因为大多数内容管道都使用三角形,并且您不太可能遇到非平面矩形等问题。如果您可以选择内容格式,则肯定要使用三角形,这样就完全跳过了三角剖分步骤。

1
任何几何形状都可以用三角形来表示,这就是为什么决定使用三角形而不是四边形的原因之一。另一个原因是两个三角形不必共面,而四边形则不行。
是的,你可以选择渲染四边形,但驱动程序会将四边形转换为两个三角形。
因此,选择渲染四边形不会使GPU的工作量减少,而会使CPU的工作量增加,因为它必须进行转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接