2013-07-29 139 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倍的時間來渲染它,忽視並行渲染 –