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