OpenGL 幀緩沖區


  幀緩沖區
  幾乎每個圖形程序的重要目標之一都是在屏幕上繪制圖形。屏幕是由一個矩形像素數組組成的,每個像素都可以在圖像的某一個點上顯示一個某種顏色的微小方塊。在光柵化階段(包括紋理和霧)之后,數據就不再是像素,而是片段。每個片段都具有與像素對應的坐標數據以及顏色值和深度值。
  如果順利通過了這些測試和操作,片段值便可以轉換為像素。 如果順利通過了這些測試和操作,片段值便可以轉換為像素。為了繪制這些像素,我們需要知道它們的顏色(即存儲在顏色緩沖區中的信息)。當每個像素的數據按照統一的方式存儲時,存儲所有像素的數據按照統一的方式存儲時,存儲所有像素的存儲空間就叫做緩沖區。不同的緩沖區為每個像素存儲的數據量可能不同。但是,在一個特定的緩沖區內,每個像素存儲的數據是相同的。為每個像素存儲了1位信息的緩沖區又稱為位平面(bitplane)。

  顏色緩沖區,它用於保存屏幕上所顯示的顏色信息。假設屏幕的寬度為1280個像素,高度為1024像素,並使用24位的完整顏色。換句話說,這個屏幕可以顯示2的24次方中不同的顏色。由於24位相當於3個字節,因此這個顏色緩沖區必須為屏幕上1289*1024個像素的每一個都存儲在3個字節的數據。在特定的硬件系統中,物理屏幕所顯示的像素可能更多或更少。另外,每個像素可能更多或更少。另外,每個像素的數據量也可能更多或更少。但是,對於一個特定的顏色緩沖區而言,它為屏幕上每個像素所存儲的數據量是相同的。
  顏色緩沖區只是用了存儲像素信息的許多緩沖區之一,還有很多其他緩沖區。例如,深度緩沖區存儲了每個像素的深度信息。顏色緩沖區本身也可能包括幾個子緩沖區。系統的幀緩沖區是由所有這些緩沖區組成的。除了顏色緩沖區之外,其他緩沖區都無法直接查看,它們用於實現諸如隱藏表面消除,場景抗鋸齒、模版測試、繪制平滑的運動圖像等功能。 
  顏色緩沖區通常用於繪圖的緩沖區。它們包含了顏色索引或RGB顏色數據,還可能包含alpha數據。支持立體畫面的OpenGL實現了提供了左右顏色緩沖區,分別包含了左右立體圖像。如果OpenGL實現不支持立體圖像,那就值使用了左緩沖區。類似地,雙緩沖系統提供了前后緩沖區,而單緩沖系統只提供了前緩沖區。

  深度緩沖區
  深度緩沖區存儲每個像素的深度值。深度通常是根據物體和觀察點的距離來測量的,因此具有較大深度的像素有可能會被具有較小深度值的像素覆蓋。但是,這只是一種通常的約定,我們完全可以更改深度緩沖區的行為。深度緩沖區有時又稱為z緩沖區(x表示屏幕的水平方向,y表示屏幕的垂直方向,z表示從觀察點垂直於屏幕的方向)。

  模版緩沖區
  模版緩沖區的用途之一就是把繪圖限制在屏幕中的某個區域,就像使用紙板和噴漆實現精確的繪圖一樣。例如,例如,如果想繪制一幅在形狀怪異的擋風玻璃上出現的圖像,可以在模版緩沖區內存儲一幅擋風玻璃形狀的圖像,然后在繪制整個場景。模版緩沖區可以防止哪些透過擋風玻璃無法看到的物體被繪制出來。因此,如果應用程序是一個模擬駕駛的程序,可以只繪制車內的儀表和其他物體1次,當汽車開動時,只有車窗外的場景需要更新。

  積累緩沖區
  與RGBA模式下的顏色緩沖區一樣,積累緩沖區也用於存儲RGBA顏色數據(在顏色索引模式下,使用積累緩沖區的結果是未定義的)。積累緩沖區通常用於把一些列的圖像合成為一幅圖像。通過這種方法,可以對圖像驚醒超量采樣,然后對樣本求平均值,並且將結果寫入到顏色緩沖區中,從而顯示場景的抗鋸齒處理。不能把數據直接寫入到積累緩沖區,積累操作總是以矩形塊為單位對數據進行操作,通常是把數據移入或一出顏色緩沖區。 

  清除緩沖區
  在圖形程序中,清楚屏幕(以及所有緩沖區)是開銷最大的操作之一。一個1280*1024的屏幕包含了上百萬的像素。對於簡單的圖形應用程序,清除操作話費的時間可能比接下來進行的繪圖操作的時間還要多。如果需要清除的不僅僅是顏色緩沖區,還需要清除深度和模版緩沖區,清除操作所花費的時間可能還要成倍地增加。 為了解決這個問題,有些計算機提供了能夠同時清除多個緩沖區的硬件。OpenGL的清除命令能夠充分的利用這類硬件的優勢。首先,指定需要寫入到每個將要清除的緩沖區的值,然后發布一條命令執行清除操作。在這個命令中,需要傳遞將要清除的緩沖區列表。如果硬件支持同時清除多個緩沖區,這些清除操作就會同時進行。否則,這些緩沖區就會按順序逐個清除。

write by fgd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM