關於Direct3D中用於控制三維多邊形的著色模式

aliaskavin發表於2008-04-11

 用於渲染多邊形的著色模式完全影響到渲染結果。著色模式決定在多邊形表面上任意一點上顏色的強度和光照。Microsoft Direct3D支援兩種著色模式:平面著色和高洛德著色。  
    在平面著色模式中,當Direct3D渲染流水線渲染一個多邊形時,使用第一個頂點的材質顏色作為整個多邊形的顏色。用平面著色渲染的三維物體有明顯的邊緣,如果它們不共面的話。  
      
     當Direct3D使用高洛德著色渲染一個多邊形時,它根據頂點法向和光照引數為每個頂點計算顏色。然後,貫穿多邊形的表面對顏色進行插值。插值是線性的。例如,如果頂點1的顏色的紅色分量為0.8,頂點2的顏色的紅色分量為0.4,如果使用高洛德著色模式和RGB顏色模型,那麼Direct3D光照模組會把紅色分量0.6賦給位於這兩個頂點連線中點處的畫素。  
    高洛德著色使經過光照的平直表面看起來比平面著色更真實。平面著色模式中的表面具有相同的顏色,但高洛德著色能使光線更準確地照射在表面上。如果附近有點光源,那麼這種效果特別明顯。高洛德著色使在平面著色中明顯可見的邊緣變得光滑。但是,它會產生馬克帶(marc band),這是在相鄰多邊形間沒有平滑混合的顏色帶或光帶。應用程式可以通過增加物體中多邊形的數量,或增大螢幕解析度,或增加顏色深度來減少馬克帶效應。  
    設定著色模式可以通過IDirect3DDevice9::SetRenderState方法改變著色模式。應該將State引數設為D3DRS_SHADEMODE。Value引數必須被設為D3DSHADEMODE列舉型別的成員。以下示例程式碼顯示瞭如何將Direct3D應用程式當前的著色模式設定為平面或高洛德著色模式。  

 

// 設定為平面著色。
// 本示例程式碼假設pDev是一個指向IDirect3DDevice9介面的有效指標。
hr = pDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);  
if(FAILED(hr))  
{  
// 這裡是錯誤處理程式碼。
}


// 設定為高洛德著色。這是Direct3D的預設設定。
hr = pDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);  
if(FAILED(hr))  
{  
// 這裡是錯誤處理程式碼。
}

 


原文地址: http://www.csinx.org/IBlog/article.asp?id=4

相關文章