我正在使用OpenGL绘制2D形状。他们没有使用那么多的多边形。我注意到只要它们不重叠,我就可以有很多很多形状。如果我在后面的形状后面形状......等等......它真的开始滞后了。我觉得我可能做错了什么。这是正常的,有没有办法解决这个问题(我不能省略渲染,因为我为alpha做混合)。我也启用了CW背面剔除。
由于
答案 0 :(得分:2)
您的两种情况(重叠和非重叠)是否使用完全相同的形状集?因为如果重叠的情况涉及所有形状的总面积大于第一种情况,那么预计它会更慢。如果它们是相同的一组形状,如果它们中的一些重叠会减慢,那么这将是非常不寻常的,并且不应该发生在任何标准硬件OpenGL实现上(您使用的是什么平台?)。背面剔除不会造成任何问题。
每当绘制一个形状时,GPU必须为它在屏幕上覆盖的每个像素做一些工作。如果你在同一个地方绘制相同的形状100次,那么这是像素工作的100倍。如果以深度排序的顺序绘制对象,深度缓冲可以减少不透明对象的一些额外成本,但是这个技巧对于使用透明度的东西不起作用。
使用透明度时,它是每个渲染形状的重要区域的总和。不是在渲染完所有内容后覆盖的屏幕数量。
答案 1 :(得分:0)
如果形状是不透明的,您需要从前到后订购它们。然后深度测试可以快速轻松地拒绝每个像素。
然后,如果它们是透明的,您需要将它们从前到后排序。无序渲染透明度非常慢。
编辑:嗯,我(不知何故)错过了这是2D的事实,尽管OP反复提到它。