使用累加緩衝實現移動模糊

來源:互聯網
上載者:User

以前用OGRE3D的時候,可以使用合成器來實現各種後期效果的合成。個人覺得移動模糊最炫了。於是就自己嘗試著使用OPENGL渲染了一下。本方法完全屬於我個人獨創。(紅寶書裡沒給例子,只是一帶而過。網上的代碼都不完整,看的我頭暈~~於是才決定自己實現~~)。其實,這東東很簡單。首先,你必須理解OPENGL累加緩衝的意義和作用。明白自己要實現效果(比如移動模糊,景深,消除鋸齒等等)的基本原理,OK,你就可以自己來實現你所想要的效果了。

 

首先,說說OPENGL累加緩衝。和模板緩衝一樣,你不能直接去寫它。必須從一個顏色緩衝往裡拷貝。實現各種疊加和累積操作之後,再從累加緩衝中考到需要的緩衝中(比如,顏色緩衝)。這樣就可以實現各種幀與幀之間的累積混合效果。

 

使用方法也很簡單:

 

1. 設定重新整理預設值, glClearAccum(r,g,b,a);

2. 在需要的時候進行重新整理,glClear(GL_ACCUM_BUFFER_BIT); // 建議獨立使用,沒必要和深度、顏色、模板等在一起

3. 在需要的地方進行需要的操作, glAccum( op, value ); // 第一個參數指定操作類型,第二個為縮放因子(和操作配合使用)

 

詳細的函數說明,可以參考OGL官網地址,如下:

http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/node115.html

 

下面說說如何?移動模糊。其實,移動模糊是把多次渲染的畫面進行按比例疊加。如果世界是靜止的,渲染所得到的所有映像都一樣,那也就無所謂移動模糊了。在OGL裡,我們可以在累加緩衝中進行疊加,然後輸出到顏色緩衝。OK,太簡單了吧?~是啊,的確很簡單。我的實現都不超過50行代碼,呵呵。下面說說我的實現思路。

 

第一次渲染:

首先,我把累加緩衝清空(就清空這麼一次,看來和其他緩衝的清空分離是有必要的~)。

然後,渲染一次情境(如果你不想全情境都實現模糊,當然可以隨意選擇部分物體~),完全累加到累加緩衝(GL_ACCUM操作,參數1)。

最後,把累加緩衝的東東寫到顏色緩衝(GL_RETURN操作,參數1)。

 

逐幀渲染:

首先,渲染一次情境,按一定比例累加到累加緩衝(GL_ACCUM操作,參數1/N)。

其次,然後縮放累加緩衝中的值(GL_MULT操作,參數N/(N+1))。

最後,把累加緩衝中的東東寫到顏色緩衝(GL_RETURN操作,參數1)。

 

OK,!~一切搞定。~~

這裡對上述操作稍做說明:

首先,因為要逐幀累加,故第一次要全值拷到顏色緩衝,不然,最初顯示會由暗慢慢變數。(呵呵,這不是我需要的效果~~)

其次,因為不斷的累加顏色,會導致很快超額”曝光“,整個螢幕就一片泛白了~所以,需要在每次累加之後進行適當的縮放。~

最後,N取值要適當,不能太大。否則,拖影會消失的很慢。太小會看不到效果~~(下面,我的取值為4)

 

好了,看看效果。是不是和OGRE合成器的效果一樣呢~

 

 

呵呵,是不是這樣的粒子系統更炫~~

 

 

 

 

 

 

 

 

呵呵,是不是有點感覺。嗯,作為對比。再來看看OGRE3D合成器的效果:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.