opengl的管線概述

   在opengl的管線以下所示:測試

                   讀取頂點數據—>執行頂點着色器—>圖元裝配—>光柵化圖元—>執行片斷着色器—>逐片斷操做—>幀緩衝區操做ci

    1.讀取頂點數據。經過glDrawArrays.glDrawElements指定圖元的頂點。數學

    2.執行頂點着色器。在着色器中逐個頂點的操做,在這個階段能作的工做則是:模板

        1. 頂點變換:根據模型視圖和投影矩陣變換渲染

        2.光照計算和法線變換(法線矩陣 是模型矩陣的左上角3*3的逆矩陣)和法線規格化sso

        3. 紋理座標變換.(紋理矩陣)數據

        4.材質狀態:紋理座標生成opengl

這個階段接受到的是每一個頂點的原始數據,輸出的則是變換後的頂點數據。工作

     3.圖元組裝。在這個階段頂點數據已經肯定,根據圖元規則,好比GL_POINTS 、GL_TRIANGLES 等將頂點組裝成圖元。此外對每一個圖元及其對應的頂點執行裁剪(若是是透視投影,須要用透視矩陣作數學運算,關鍵是獲得W的值),透視除法,視口變換。 這裏面的知識點有不少,我會在之後的文章裏面仔細講解。生成

      4.光柵化圖元。在頂點變換和圖元裁剪以後,光柵化管線取得單獨圖元(如三角形,線段,點),併爲該圖元生成對應的片斷,每一個片斷直接映射到屏幕上的像素,結果一個片斷就對應一個像素。然而,並不老是這樣的,在超高分辨率的設備上,可能使用教大的片斷,一個片斷對應幾個像素,以減小GPU的工做負荷。

     5.執行片斷着色器。在該階段主要的任務是指定一個片斷的顏色和深度值。分爲如下幾種狀況:

           1.紋理顏色。經過紋理座標從採樣器裏面獲取相對應的顏色。

           2.霧化顏色。經過片斷與當前視點位置計算霧化的顏色。

           3.顏色彙總..這個與混合徹底不一樣概念.將紋理,主定義的顏色,霧化的顏色,光照顏色階段計算的顏色 彙總一塊兒.

         除了上面的三點以外,還能夠執行兩個不是設置片斷顏色的功能:剪切平面(glScissor) ,Alpha測試(glAlphaFunc)

      6.逐片斷操做。該階段發生在片斷着色器以後,片斷着色器的輸出是顏色和深度值,在逐片斷操做階段會執行一系列的操做,能夠應用到幀緩衝區中。這一系列的操做以下:

           1.裁剪區域測試(指定只有一個矩形區域內的像素能夠被修改)

           2.模板緩衝區測試

           3.深度緩衝區測試

           4.多重採樣 

           5.混合

           6.抖動

    7.幀緩衝區操做。 在真正渲染到界面以前,渲染內容會先被渲染到緩衝區中。系統提供一個默認的緩衝區,可是要實現一些特殊的效果,使用默認的緩衝區沒法實現,因此,咱們須要建立另一個緩衝區,在這個緩衝區中繪製紋理,而後再把這個紋理繪製到默認的緩衝區中,而後在屏幕上會顯示出這個默認的緩衝區。

相關文章
相關標籤/搜索