視頻教程請關注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440編程
學習shader以前必須知道的事情,shader(着色語言)到底發生在那個階段, OpenGL的渲染管線有哪些階段學習
對開發人員來講很重要,也許你剛剛接觸,或者你在使用已有的產品,很優秀的遊戲引擎,或者渲染引擎,你測試
以爲知道這個沒有太大意義,但知道了這些,總歸對你沒有壞處。.net
下圖是一個很是簡化框圖流水線的各個階段,並在他們之間傳播的數據。雖然極其簡單,它是足夠的着色器編程,3d
提出了一些重要的概念。固定管線中存在不少階段,並存在不少細節,這裏只是粗略的介紹。視頻
(1)頂點變換:blog
在這裏,一個頂點的屬性,如在空間的位置,以及它的顏色,法線,紋理座標,其中包括一組。這個階段的輸入教程
的各個頂點的屬性。由固定的功能所執行的操做,主要完成一下工做:遊戲
1. 頂點位置變換
2. 計算頂點觀照
3. 紋理座標變換開發
(2)圖元裝配:
這個階段的輸入的變換後的頂點,以及連通性信息。這後者的一塊數據告訴頂點如何鏈接,以造成一種原始的
繪製數據,這個階段還負責對視錐裁剪操做,背面剔除。光柵掃描肯定的片斷,和原始的像素位置。
在此上下文中的片斷是一塊的數據,將用於更新的像素在幀緩衝區中,在特定的位置。片斷包含不只是顏色,
也法線和紋理座標,其中包括可能的屬性,被用來計算新像素的顏色。上面的頂點變換階段,計算出的值與頂點鏈接信息相結合,
容許當前階段來計算相應的屬性的片斷。好比,每一個頂點的變換位置。當考慮到頂點,使一個原語,
是能夠計算的原始片斷的位置。另外一個例子是,使用的顏色。若是一個三角形,而後用不一樣的顏色有其頂點的顏
色的三角形內的片斷片斷的相對的頂點的距離加權的三角形的頂點的顏色插值的方式得到。
(3)紋理映射,着色:
插值片斷信息是這一階段的輸入。彩色已經在前一階段的計算是經過內插法,在這裏,它能夠結合例如一個紋理像素(紋理元素)。
紋理座標也已經在前一階段內插。霧也適用於在這個階段。每一個片斷的本階段的共同的最終結果是一個顏色值和深度的片斷。
(4)最後階段的管道上的片斷,進行了一系列的測試:
1. 裁減測試
2.Alpha(透明度)測試
3.模板測試
4.深度測試
經過測試的片斷信息,而後用於更新的像素的值,根據當前的混合模式。請注意,混合只發生在這個階段,由於片斷紋理和着色階段,
有沒有訪問幀緩衝區。幀緩衝區是惟一可以在這個階段。
下圖很明瞭的說明了各個階段的任務:
最後這個圖畫 的比較醜,你們見諒(ps 基本屬於文盲),鑑於本人能力有限,對各個階段的理解若有不錯誤
還請指教。
最後,到shader上場了,shader具體在那個階段呢(如今的shader已經出到第四版本了,增長了不少新功能)
vertex shader(頂點shader)發生在頂點變換階段,經過頂點shader能夠修改一些基本的圖元屬性,顏色,光照,發現等
fragment shader(片斷shader)主要發生在 紋理着色階段,主要是對上一階段輸出的數據,進行再次加工。