2010-07-17 125 views
2

我使用OpenGL並在2D視圖中繪製多邊形。我怎麼能模糊一個多邊形,而不使用glsl,只有模板緩衝區和東西。謝謝使用OpenGL模糊?

+0

紋理貼圖怎麼樣?您可以生成具有適當模糊邊緣的正方形(alpha朝着邊緣或某物減小),然後紋理映射您的多邊形,以便邊緣也可以脫落。這隻會在內部模糊。不過,真正的模糊會超出多邊形的邊界。 – cape1232 2010-07-17 03:19:12

+0

我當然不是OpenGL的專家,但我不敢打賭,最簡單的解決方案不包括GLSL。 – zneak 2010-07-17 03:19:44

+0

OpenSceneGraph具有[Fog屬性] [http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/StateSets],您可以在狀態集中打開它。 OSG基於OpenGL(正確??),所以應該有一種方法來複制效果。 – cape1232 2010-07-17 03:22:51

回答

4

正常的方法使用累積緩衝區而不是模板緩衝區。基本上重新繪製多邊形的次數很多,但每次都要稍微改變觀察角度。確切地說,你改變了你所得到的模糊風格。例如,如果您想要縮放鏡頭等效果,則可以在兩幀之間稍微改變視角。如果您想要運動模糊,請改爲改變攝像機視角。通過一些額外的工作,你可以做一些有點奇怪的效果,例如向前移動你的視角,同時縮小,所以(大部分)場景保持大致相同的大小,但是你觀看的視角它從不斷變化。

+0

請注意使用累積緩衝區的速度可能會非常慢(這是因爲必須進行重新繪製以及許多消費級圖形芯片組未提供硬件加速累積緩衝區)。 – 2010-07-17 10:21:30

+0

@Greg:不幸的是,這太過真實了! – 2010-07-17 13:45:06

4

有兩種快速和骯髒的方法。 GLSL或Cg是你最好的解決方案,特別是如果你需要任何像樣的模糊(高斯,盒子,動作等)。但是,您可以:

  • 以較低的分辨率渲染圖像,通常渲染到紋理,然後在高分辨率渲染該紋理到屏幕。它會模糊圖像,但您需要使用三線或各向異性過濾來使其看起來不錯。通常它不會,但那些幫助。
  • 將圖像渲染爲紋理,渲染一次以完全不透明度進行屏幕顯示,然後打開混合,關閉alpha並渲染圖像向左移動一點,向右移動一點,向上移動一點,向下移動一點...等等。你需要低透明度的前置渲染,但是它們會有效地模糊場景。您可能還想要使用混合模式,SrcColor/InvSrcColor或DstColor/InvDstColor可能會有所幫助。

有幾種方法可以做到這一點,沒有着色器,但沒有一個是最佳的。