2013-07-29 143 views
1

如何在整个渲染上对三角形进行抗锯齿?我应该把它放在fragmentShader上吗?有没有其他很好的解决方案来改善这种情况?OpenGL ES 2.0上的抗锯齿问题

这是我的“视图”,有非常脆的边缘(不是很好)。

enter image description here

回答

5

做一些深入的研究后,我发现,这其实很简单,最comonly做的是使像有一个屏幕大4倍(甚至4倍以上)。在渲染到这个更大的屏幕之后,GPU将占据该区域的大部分并基于此设置像素颜色。

这是很容易使用这个库来实现这一点:

https://code.google.com/p/gdc2011-android-opengl/source/browse/trunk/src/com/example/gdc11/ MultisampleConfigChooser.java

然而,你应该记住,这将花费4个或更多倍的时间来呈现的一切,这意味着更多的时间来处理,也许,FPS少...

另外,如果你使用OpenGL模拟Android设备,找出您的GPU是否支持这种Multisampling。我的例子是doesen't(Tegra)。

下面是最终的结果,有和没有多重采样:

enter image description here

+2

多重采样并不是以4甚至还没有接近的一个因素增加了渲染时间。它仍然只对每个像素执行一次片段着色器,然后根据覆盖率将相同的结果写入最多4个输出样本。虽然输出缓冲区理论上是4倍大,但它通常是压缩的。这个答案所描述的听起来更像是超采样,这是一种非常不同的方法。 –

+2

@ReetoKoradi,但无论如何,片段着色器将需要“再呈现”4个像素,以便处理平均值。如果渲染一个像素的成本为1,渲染4的成本为4,再加上时间来取平均值......当然,它不会是“平均所需时间”,而是它的最大限制(因为取决于GPU内核的数量,它可以并行完成...但无论如何,它将花费4倍的时间来渲染它,忽视并行渲染 –