opengl中存在各種緩衝區,用以實現不同功能,(參考緩衝區簡介) 。累積快取(accumulate buffer)就是一種,它主要為了輔助累積計算。例如:運動模糊、全域性反走樣和軟陰影等。對於累積快取的操作,需要使用glaccum()等函式進行。下面是涉及到的主要函式:
(一)void glclearaccum( glfloatred,glfloatgreen,glfloatblue,glfloatalpha);
指定累積緩衝區清空時設定的預設值。包括紅、綠、藍、透明度。預設為0。
(二)void glclear( glbitfieldmask);
設定mask包括gl_accum_buffer_bit,以實際清除累積快取中的內容。
(三)void glaccum( glenumop,glfloatvalue);
對於累積快取中的內容進行操作。op定義操作,value為操作相關值。具體如下:
1:gl_load
將當前緩衝內容裝入累積快取中(直接的複製)。value為裝載時的比例係數(0~1.0)。
r' = r * value, g' = g * value,b' = b * value,a' = a * value
2:gl_accum
將當前緩衝中的內容和累積快取中內容進行累積混合,結果放入累積快取中。
r' = r*(1.0-value) + r*value g' = g*(1.0-value) + g*value
b' = b*(1.0-value) + b*value a' = a*(1.0-value) + a*value
3:gl_add
將累積快取中的內容加特定值。
r' = r' + value,g' = g' + value,b' = b' + value,a' = a' + value
4:gl_mult
將累積快取中的內容乘以特定值。
r' = r' * value,g' = g' * value,b' = b' * value,a' = a' * value
5:gl_return
將累積快取中的內容拷貝到顏色快取或當前選擇緩衝區。
r = r' * value,g = g' * value,b = b' * value,a = a' * value
實際應用時,可以遵循下列參考步驟:
(一)呼叫glaccum(gl_load, value)將選定緩衝區內容裝入累積快取中。
(二)呼叫glaccum(gl_accum, value)、glaccum(gl_add, value)或glaccum(gl_mult, value)進行累積計算。
(三)glaccum(gl_return, value)將結果返回給指定的緩衝區。
注:當前選定緩衝區可以由glreadbuffer()指定,預設為後顏色緩衝區。
下面為乙個實際的運動模糊例項:
void drawmotionblur()
{glclear(gl_color_buffer_bit | gl_depth_buffer_bit);
glloadidentity();
glulookat(0.0,0.0,10.0,0.0,0.0,0.0,0.0,1.0,0.0);
glfloat angle = 0.0f;
for(int i=0; i注: 累積快取可以採用多次渲染加透明混合實現類似效果。
OGL 累積快取
累積快取 ogl 3.1後開始廢棄累計快取區了,累計快取區實現的全景抗鋸齒,前景或景深,運動模糊的效果,可以 用 alpha和多重取樣覆蓋,顏色快取區中的浮點畫素格式用fragment shader很容易實現。由於累積緩衝區會帶來大記憶體的開銷,所以在實時應用程式中比較少用。示例 操作 描述 gl ...
庫及其應用
庫及其應用 danny kalev發表於2004 12 27 16 11 06 1 何為 tuple?tuple 是乙個大小固定的異構物件集合。tuple 型別有很多有用的應用,比如封裝乙個函式的多個返回值以及模擬多個物件的同時賦值和比較。tuple 的大小是指它所包含的元素的個數。目前的 tupl...
Merkle Tree及其應用
merkle tree,是一種樹 資料結構中所說的樹 網上大都稱為merkle hash tree,這是因為 它所構造的merkle tree的所有節點都是hash值。merkle tree具有以下特點 1.它是一種樹,可以是二叉樹,也可以多叉樹,無論是幾叉樹,它都具有樹結構的所有特點 2.merk...