1. 程式人生 > >OpenGL-渲染管線的流程(有圖有真相)

OpenGL-渲染管線的流程(有圖有真相)

學習shader之前必須知道的事情,shader(著色語言)到底發生在那個階段, OpenGL的渲染管線有哪些階段

對開發人員來說很重要,也許你剛剛接觸,或者你在使用已有的產品,很優秀的遊戲引擎,或者渲染引擎,你

覺得知道這個沒有太大意義,但知道了這些,總歸對你沒有壞處。

下圖是一個非常簡化框圖流水線的各個階段,並在他們之間傳播的資料。雖然極其簡單,它是足夠的著色器程式設計,

提出了一些重要的概念。固定管線中存在很多階段,並存在很多細節,這裡只是粗略的介紹。

(1)頂點變換:

在這裡,一個頂點的屬性,如在空間的位置,以及它的顏色,法線,紋理座標,其中包括一組。這個階段的輸入

的各個頂點的屬性。由固定的功能所執行的操作,主要完成一下工作:

  1.  頂點位置變換
  2.  計算頂點觀照
  3.  紋理座標變換

(2)圖元裝配:

    這個階段的輸入的變換後的頂點,以及連通性資訊。這後者的一塊資料告訴頂點如何連線,以形成一種原始的

繪製資料,這個階段還負責對視錐裁剪操作,背面剔除。光柵掃描確定的片段,和原始的畫素位置。

在此上下文中的片段是一塊的資料,將用於更新的畫素在幀緩衝區中,在特定的位置。片段包含不僅是顏色,

也法線和紋理座標,其中包括可能的屬性,被用來計算新畫素的顏色。上面的頂點變換階段,計算出的值與頂點連線資訊相結合,

允許當前階段來計算相應的屬性的片段。比如,每個頂點的變換位置。當考慮到頂點,使一個原語,

是可以計算的原始片段的位置。另一個例子是,使用的顏色。如果一個三角形,然後用不同的顏色有其頂點的顏

色的三角形內的片段片段的相對的頂點的距離加權的三角形的頂點的顏色插值的方式獲得。

(3)紋理對映,著色:

  插值片段資訊是這一階段的輸入。彩色已經在前一階段的計算是通過內插法,在這裡,它可以結合例如一個紋理畫素(紋理元素)。

紋理座標也已經在前一階段內插。霧也適用於在這個階段。每個片段的本階段的共同的最終結果是一個顏色值和深度的片段。

(4)最後階段的管道上的片段,進行了一系列的測試:

  1. 裁減測試
      2.Alpha(透明度)測試
      3.模板測試
      4.深度測試

通過測試的片段資訊,然後用於更新的畫素的值,根據當前的混合模式。請注意,混合只發生在這個階段,因為片段紋理和著色階段,

有沒有訪問幀緩衝區。幀緩衝區是唯一能夠在這個階段。

下圖很明瞭的說明了各個階段的任務:

最後這個圖畫 的比較醜,大家見諒(ps 基本屬於文盲),鑑於本人能力有限,對各個階段的理解如有不錯誤

還請指教。

   最後,到shader上場了,shader具體在那個階段呢(現在的shader已經出到第四版本了,增加了很多新功能)

vertex shader(頂點shader)發生在頂點變換階段,通過頂點shader可以修改一些基本的圖元屬性,顏色,光照,發現等

fragment shader(片段shader)主要發生在 紋理著色階段,主要是對上一階段輸出的資料,進行再次加工。