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


視頻教程請關注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440

學習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)主要發生在 紋理着色階段,主要是對上一階段輸出的數據,進行再次加工。

 

 


免責聲明!

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



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