所以我一直在寻找我的程序的优化,如果使用QUADS是最有效的方法,我一直在徘徊。我正在使用Mapped interleaved VBOs for QUADS vertices 和TEXTURE coords 。
所以我想知道在使用以下之一而不是QUADS进行渲染时是否有明显的性能提升:
注意:这需要包括我正在使用纹理的事实!
- TRIANGLE_STRIPS
- 三角形
- QUAD_STRIPS
哪个最快?
注2:我环顾四周,找不到明确的答案。
GL_QUAD_STRIP
在当前版本的 OpenGL 中已弃用且不支持,所以它已经过时了。另外,无论如何它都不是太快 - 请参阅这篇文章以很好地解释为什么不再支持它(出于兼容性目的保存)。
GL_TRIANGLES
通常是一个好方法。它会比使用过时的功能更快。而且它在原则上也更快 - 无论如何,四边形都被分解成三角形,所以你可以通过在 CPU 端做一次然后保存它必须做的 GPU 工作来节省一堆不必要的工作。三角形是指定形状的标准且完美的方法。
GL_TRIANGLE_STRIP
比GL_TRIANGLES
指定第一个三角形后指定每个三角形需要一个点,而不是三个。使用之前三角形的前两个顶点。你得到连接的三角形,但你也使用更少的内存。因为您必须阅读更少,所以您可以更快地处理。而且由于您的最后两个顶点刚刚在最后一个三角形中指定,因此它们将比可能来自谁知道在哪里的其他两个顶点更容易在内存中获取。还有一些技巧可以使用退化三角形条来实现三角形之间的无缝跳转。
如果想要三者中的最佳表现,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)