關於Direct3D中用於控制三維多邊形的著色模式
用於渲染多邊形的著色模式完全影響到渲染結果。著色模式決定在多邊形表面上任意一點上顏色的強度和光照。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))
{
// 這裡是錯誤處理程式碼。
}
// 本示例程式碼假設pDev是一個指向IDirect3DDevice9介面的有效指標。
hr = pDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
if(FAILED(hr))
{
// 這裡是錯誤處理程式碼。
}
// 設定為高洛德著色。這是Direct3D的預設設定。
hr = pDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
if(FAILED(hr))
{
// 這裡是錯誤處理程式碼。
}
相關文章
- 基於C#的多邊形衝突檢測C#
- 關於多維程式的思考 (轉)
- 關於多執行緒控制執行緒
- 線段與多邊形關係的演算法演算法
- AntV G6 關於多邊繪製的解決方案
- 關於版本控制
- opencv多邊形逼近OpenCV
- SVG <polygon> 多邊形SVGGo
- 關於運營邊界的思考
- 關於Decorator模式模式
- 關於Template模式模式
- 關於索引的使用模式索引模式
- 關於設計模式的設計模式
- 關於oracle的控制檔案Oracle
- 純CSS畫的基本圖形(矩形、圓形、三角形、多邊形、愛心、八卦CSS
- OpenGL 學習 05 花托(剔除 深度測試 多邊形模式)模式
- 關於多型實現Singleton模式的探討 (轉)多型模式
- 【計算幾何】點定位(線段,三角形,多邊形)
- 關於border設定無邊框
- 關於單例模式單例模式
- 關於門面模式模式
- 關於設計模式設計模式
- (轉)關於 awk 的 pattern(模式)模式
- 關於shutdown的幾個模式模式
- 關於橋模式的問題模式
- 關於物件的建造模式物件模式
- 關於組合模式的疑惑模式
- 關於工廠模式的思考模式
- 關於 二維碼 解析
- [CSS LEARN]Border與多邊形CSS
- 【JAVA】多邊形重心計算Java
- Facebook 面試題 | 凸多邊形面試題
- 關於java多型Java多型
- oracle 關於--控制檔案Oracle
- 關於控制檔案的總結
- python關於函式形參Python函式
- 關於基於Form的多檔案上載 (轉)ORM
- 關於多例模式-from單例模式模式單例