下面開始詳解3D渲染流水線:
1、首先要設定好各種轉換矩陣(相機矩陣、投影矩陣、模型矩陣,D3D要分别設定這三個,Opengl則把相機矩陣和模型矩陣相乘作為一個結果來設定)。然後準備好頂點以及把頂點組成圖元的索引資料。
2、把頂點和索引(圖元資訊資料)交給顯示卡。顯示卡的頂點處理單元開始工作了,顯示卡内部依次對每個頂點處理,這裡有兩種模式,固定管線和Shader模式。
3、頂點處理器,每個頂點處理的過程是通過世界矩陣和相機矩陣把頂點位置轉換到相機空間中,然後再通過投影矩陣轉換到裁剪坐标系中,這樣以後就可以在裁剪坐标系進行裁剪了。這個頂點處理過程也包括光照和貼圖的處理,以配置設定給每個頂點顔色資訊.(注意,光照和貼圖是這個步驟開始處理的)。這個階段可以由使用者寫的VertexShader代替。
4、圖元裝配和裁剪階段,這個階段把上面轉換好的頂點根據定點索引和圖元類型組裝,組裝結果是一個圖元數組(底層統一轉為三角形處理)。然後把組裝的結果根據相機的可視區域(相機可視區域在透視投影下是一個四棱錐)進行裁剪。視域體之外的圖元被抛棄,橫跨視域體邊緣以及視域體内部的圖元保留。
5、光栅化。對于上一步中剩下的每一個三角形,把它三個頂點從透視空間映射到螢幕空間。然後轉換後的頂點在螢幕上依然是一個三角形(有可能退化為一個點或線,但這不影響算法),對于映射到螢幕上的三角形内的每一個像素,根據它在三角形中的位置,通過三角形原來的三個頂點進行插值。插值得到的結果包括紋理坐标、頂點法線等,這些資訊會被傳入下一個階段。
6、片元處理器(OPENGL中的稱呼)或稱為像素處理器(D3D中的稱呼)階段。這個階段可以由使用者寫的PixelShader代替。這個階段可輸入頂點處理器插值後傳過來的紋理坐标或像素點法線或者使用者自定義輸出變量。這個階段主要輸出一個顔色值,包括alpha。也可以輸出一個Z值,好像不常用。是以應該知道,在這裡像素處理器是可以改變像素深度的。
7、對上一個階段輸出的片元資訊進行各種測試,先進行alpha test, 沒通過測試的像素不會進入下一步測試。然後進行stencil test(根據stencil buffer上的值)和z-test(根據這個像素的Z值和z-buffer上的值進行比較),根據測試結果會對stencil buffer進行一些修改。
8、對上一個階段的剩下的傳過來的像素,更新它在Z-Buffer中的Z值,然後開始與幀緩沖區中已存在的該位置的像素根據混合方式進行混合(Alpha Blend)。混合以後的像素就被"畫"到螢幕上了。

圖5:标準OpenGL和Direct3D光栅操作
流程大體這樣。有表達錯誤的請幫忙指正。
其中有一些要注意的,stencil test 和 alpha test 什麼差別呢?alpha test的測試數值來源是對象紋理所生成的alpha值,大多是直接從貼圖中獲得。stencil測試熟知的來源是畫面上所存儲的stencil值。stencil test 一般配合 alpha test使用。給alpha設定一個參考值,來更新畫面,将通過alpha測試的像素的stencil值設定為某個值。下面的步驟中再使用這個stencil值。
注意光照和貼圖使用的時機。其實光照和貼圖第一次實在頂點處理器中使用的,但後面圖元中的插值出來的像素依然是需要插值出來的貼圖坐标的(光照不一定,固定管道光照根據光照模型來設定圖元中其他像素的光照顔色),在像素中計算光照屬于per-pixel-lighting。