累積快取是為合成多幅影象而設計的,它不是簡單的用引入象素片元來代替象素值,而是將片元進行縮放,然後加到已有的象素值上。為了經過一系列的混合操作後能夠保持精度,累積快取每個顏色分量的位數要比一般的視覺化系統要多。
我們可以象其他快取一樣清空累積快取,可以用glclearaccum()來設定紅、綠和藍色分量的清空值,按位順序清空累積快取或以gl_accum_buffer_bit呼叫glclear()命令。
你不能直接渲染進累積快取,而是應該渲染到乙個選定的快取,然後用glaccum()來將在那快取中的當前影象累積進累積快取。glaccum()用當前選擇的讀取快取來拷貝。你可以用glreadbuffer()來設定你想讀取的快取。
glaccum()有2個引數:op和value。op值可為下面中的乙個:
表1 glaccum()的op值
op值
動作
gl_accum
從當前選定的快取中讀取象素(該快取為了用glreadbuffer()進行讀取而選定,用value乘上r、g、b、a值,然後將結果加到累積快取中。
gl_load
與gl_accum操作類似,但它是用結果值替換掉累積快取中的值,而不是與之相加。
gl_return
從累積快取中取值,以value乘以該值,然後將該結果放入為寫操作而啟用的顏色快取中。
gl_add
將value值與累積快取中的每個象素值的r、g、b、a分量相加
gl_mult
將value值擷取到[-1,1]之間,然後與累積快取中的每象素的r、g、b、a分量相乘
因為你必須在累積之前渲染到另乙個快取,所以累積影象典型的方法是,將影象渲染到後快取若干次,累積每幅影象到累積快取中,當所需的影象數目已累積後,將內容拷貝回後快取中,然後交換前後快取。這樣,只有在最後,才顯示累積的影象。
下面是累積n幅影象的乙個示例程式:
1.呼叫gldrawbuffer(gl_back)來只渲染到後快取;
2.呼叫glreadbuffer(gl_back),這樣累積快取將從後快取讀取。
注意:前2步只有當應用程式已經改變了所選的寫和讀快取時才需要。若視覺化系統是雙快取,這些選擇是預設的。
3.呼叫glclear(bitfield)清空後快取,然後渲染第1幅影象;
4.呼叫glaccum(gl_load,1.f/n);這允許你避免用分開的步驟來清空累積快取;
5.改變你的影象的引數,再重繪它;
6.呼叫glaccum(gl_accum,1.f/n)來將第2幅影象加到第1幅上;
7.重複前面2個步驟≥n-2次……
8.呼叫glaccum(gl_return,1.f)來將完成的影象拷貝到後快取中;
9.呼叫glutswapbuffers()(若使用glut)或swapbuffers()(若使用win32)來交換前後快取。
累積快取提供了一種在保持好的顏色解析度下實現在場景中「多重**(multiple exposures)」的方法。使用累積快取可以產生許多影象效果來提高影象的真實性,其中包括:反走樣、運動模糊、軟陰影、深度域(景深)和卷積。要產生這些效果,必須將影象渲染多次,對場景位置(或所選的物體)進行微小的、漸增的改變,然後累積結果。
Accumulation Buffer(累積快取)
accumulation buffer 累積快取 累積快取是為合成多幅影象而設計的,它不是簡單的用引入象素片元來代替象素值,而是將片元進行縮放,然後加到已有的象素值上。為了經過一系列的混合操作後能夠保持精度,累積快取每個顏色分量的位數要比一般的視覺化系統要多。我們可以象其他快取一樣清空累積快取,可以...
django rest framework快取應用
在我們web製作過程中進場使用到快取技術,那麼今天python中的一種簡單便捷的快取技術與大家分享 以下是在省 市 區 聯動的位址查詢做的快取處理 使用快取 省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。在django rest...
Oracle學習累積
oracle學習累積 1.oracle的一些基本語句 a 實現可修改的查詢語句 select t.t.rowid from allentest t b 排序實現 按序輸出一區間段的值 select from select rownum,t.from allentest t order by id w...