Rasterization and Shading

   光柵化,我們可以將幾何圖形轉化成屏幕上的像素。Direct3D使用scanline的渲染來產生像素。 當頂點處理結束之後,所有的primitives將被轉化到screen space,在屏幕空間一個單位就是像素。點,線,三角形通過一組光柵規則被轉化成像素。光柵規則定義了一套統一的法則來產生像素。

   光柵得到的像素一般會攜帶深度值,一個RGBA diffuse 顏色,一個RGB specular 顏色,一個霧化係數和一組或者多組紋理座標。這些值都會被傳給流水線的下一個階段像素的處理,然後注入到render target。

 

Shading 和 Filling

   Shading 指Direct3D 怎麼樣爲像素計算顏色,Filling指怎樣爲primitive的內部產生像素。

   RS Shade mode 定義三種shading 的方法,包括Flat, Gouraud, Phong。 Flat shading 在每個Primitive的內部選擇一種顏色,這個顏色就是這個primitive 的第一個頂點的顏色信息。Gouraud shading 採取了線性插值的方法爲primitive的內部像素產生顏色。Phong shading 現在不被Direct3D支持,這裏就不仔細談了。

   RS Fill Mode 定義filling的方法, 它包括point, wireframe, solid。 Point filling只是填充primitive的頂點,wire frame 只取每條邊的像素。 Soild fill mode 將填充primitive內部。

   Shading 和 Filling 不光只是插值diffuse color,direct3D可以對頂點所有的信息插值,包括頂點的透明度(alpha), specular color, depth, 霧化係數,紋理座標。

   D3DCAPS9:: ShadeCaps 定義了設備shading 的能力,所有的設備都支持flat shading。 ShadeCaps的每個位都定義了頂點顏色組件的,如D3DPSHADECAPS_COLORGOURAUDRGB,D3DPSHADECAPS_SPECULARGOURAUDRGB 等等。

 

像素的產生

   利用掃描線,我們能夠很自然的判斷一個像素的中心是否在三角形primitive的內部,這樣就很容易判斷這個像素是否應該產生。但是,當一個像素被多個primitive所共享的時候,爲了讓每個像素只產生一次。這個時候,就引入一個left-filling 的法則。 left filling就是對掃描線的span的左端是取, 右端的像素捨去。

   處理線primitive, 一般有兩種方法,需要取決於線段的傾斜度。

 

像素數據

   掃描線rendering 能夠確定每個像素的x, y座標,其他值一般都是通過插值來獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章