關於幀緩衝的總結
本來想帶上例子的,發現自己懂得太晚了,沒必要了。寫下自己的理解就行了。
1. 緩衝區
緩衝區是一塊記憶體或在相應硬體中開闢的空間,目的是為了儲存像素資料中的相關資訊。
根據緩衝中不同的作用,和功能分為顏色緩衝、模板緩衝、深度緩衝、積累緩衝等(有的根據具體作用還有其他緩衝)。同意成稱為 幀緩衝!
2. 概念、原理、OpengGL實現
2.1顏色緩衝區
顏色緩衝區的作用就是實現儲存要顯示在螢幕上的,經過管線處理變化後的顏色準備顯示到螢幕上。顏色緩衝區主要包括:支援立體顯示的左右緩衝區,支援動畫的前後緩衝區(ps:動畫這裡表示實現在後緩衝區實現繪圖後 通過交換緩衝區交換到前緩衝區,不再顯示繪畫過程)。 類似 輔助庫auxSwapBuffers();實現的前後緩衝的交換。
2.2深度緩衝區
深度緩衝區儲存像素的深度值。深度值是因三維世界的興起而提出的,圖形學中(在繪畫專業估計早有此概念,畢竟好多演算法實現都是從畫家那裡得來的)。深度緩衝區也叫Z-buffer 所以,每個像素的z座標即為它的深度。
深度緩衝在立體圖形消隱等演算法中廣為應用。
2.3樣板緩衝區
樣板緩衝區作用比較奇特。模板的作用是實現渲染地區按照程式設計的方式實現。比如:如果讓你實現在顯然地區中一個小的正方形顯示渲染,你可能會想到用剪下就行了。但是,如果讓你實現一個五角星裡面渲染呢? 這時候用 模板 最為方便。
模板的應用過程就是在樣板緩衝區內設定好要顯示渲染的形狀,開啟目標測試,通過檢測的像素渲染,沒有通過的丟棄。就會出現想要的效果:在一個五角星裡有我們渲染的東西,其他地方看不見。
2.4積累緩衝區
積累緩衝區字面意思,實現了顏色的積累實現一些特殊的效果。
3. 緩衝區的操作
3.1緩衝區的清除
為了防止緩衝區內的資料對繪圖的影響,在繪圖之前要對緩衝區實行清除操作。
過程: 首先設定清除值。如:
設定顏色清除值 glClearColor(r,g,b,a)
設定深度清除值 glClearDepth(dep)
設定模板清除值 glClearStencil(int a);
然後 設定清除項 glClear();
參數包括 GL_DEPTH_BUFFER_BIT
GL_COLOR_BUFFER_BIT
GL_ACCUM_BUFFER_BIT
GL_STENCIL_BUFFER_BIT
以上幾個參數可以 相互進行或後作為參數給glColor();
3.2緩衝屏蔽
所謂緩衝屏蔽,可以理解為緩衝區是否可寫,當我們對緩衝區添加屏蔽時,並沒有停止相應測試,而是緩衝區一直沒有變。
3.3測試
http://bochuang.sinaapp.com/forum.php?mod=viewthread&tid=49&extra=page%3D1