为了批量渲染多个性能更高的相似对象,请使用带有“退化三角形”或drawArraysInstanced的drawArrays(TRIANGLE_STRIP)?

问题描述 投票:0回答:1

MDN指出:

较少,较大的绘制操作通常会提高性能。如果您要绘制1000个精灵,请尝试将其作为一个drawArrays()或drawElements()调用。

如果需要绘制,通常使用“退化三角形”不连续的对象作为单个drawArrays(TRIANGLE_STRIP)调用。退化三角形是没有面积的三角形,因此多个点在同一精确位置的三角形。有效地跳过了这些三角形,使您可以开始新的三角形三角带未附加到上一个,而无需分成多个抽签。

但是,也建议不要对多个相似的对象使用实例渲染。对于webGl2,例如drawArraysInstanced()或对于已激活drawArrays扩展名的webGl1 ANGLE_instanced_arrays

出于个人目的,我需要在2d平面中绘制大量相同宽度但高度不同的矩形(使用webgl的制图应用程序)。因此,任何针对我的用例的建议都是有价值的。

webgl webgl2
1个回答
0
投票

退化三角形通常比drawArraysInstanced快,但是当您可以制作没有退化三角形的四边形时,可以说没有理由使用退化三角形。

虽然退化三角形可能比四边形快一点,但您不太可能会注意到这种差异。实际上,我怀疑在WebGL中创建一个显示差异的示例非常困难。

要清楚,我建议手动实例化四边形。如果要绘制1000个四边形,请在单个顶点缓冲区中放置1000个四边形,然后使用drawElementsdrawArrays

进行一次绘制调用来绘制所有四边形

如果是我,但我没有进行优化就首先进行测试,则除非我已经知道要绘制> 1000个四边形,否则每个绘制调用要绘制1个四边形。然后,我会找到一些低端硬件,看看它是否太慢。大多数GPU应用程序在绑定顶点之前就已经绑定了填充率边界(绘制像素),因此即使在速度较慢的计算机上绘制大量四边形也可能会很慢,因为优化顶点计算无法解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.