關於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應用程式當前的著色模式設定為平面或高洛德著色模式。
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/734cf992c50c94f42216b4cf01215e5b06e3f9e40c5ce920c4a91880732ba8a9.gif)
![](https://i.iter01.com/images/94ad58376cb2a689507716380b48ecde952599e8369d40c85852c86d0efe4084.gif)
![](https://i.iter01.com/images/811e8c650021147a11339541acecd9efbac33035c118639f0a8015f0cb2e2aa6.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/4a704ceebc1729f9ebf73b1f61e4473fb2295750fefd516144d8b1e3d3f8af4e.gif)
![](https://i.iter01.com/images/734cf992c50c94f42216b4cf01215e5b06e3f9e40c5ce920c4a91880732ba8a9.gif)
![](https://i.iter01.com/images/94ad58376cb2a689507716380b48ecde952599e8369d40c85852c86d0efe4084.gif)
![](https://i.iter01.com/images/811e8c650021147a11339541acecd9efbac33035c118639f0a8015f0cb2e2aa6.gif)
相關文章
- 卡特蘭數關於凸多邊形的證明
- 基於C#的多邊形衝突檢測C#
- 複雜多邊形的三角剖分
- 關於版本控制
- AntV G6 關於多邊繪製的解決方案
- 關於運營邊界的思考
- SVG <polygon> 多邊形SVGGo
- opencv多邊形逼近OpenCV
- OpenGL 學習 05 花托(剔除 深度測試 多邊形模式)模式
- python關於函式形參Python函式
- IDL建立泰森多邊形
- AutoCAD C# 判斷多邊形與點的位置關係C#
- 多邊形填充-活動邊表法
- 關於工廠模式的思考模式
- 關於門面模式模式
- 關於單例模式單例模式
- 關於border設定無邊框
- [CSS LEARN]Border與多邊形CSS
- 【JAVA】多邊形重心計算Java
- 折線(Polyline)、多邊形(Polygon)Go
- matlab繪製正多邊形Matlab
- 基於Keras的三維人臉重建Keras
- 4.3.2.4 關於CDB UNDO模式模式
- 關於C++複製控制C++
- 01關於版本控制系統
- 關於CSS和JS中用到的各種Height和Width的問題CSSJS
- 關於CAD夢想控制元件介面控制控制元件
- 關於“運維”的一些思索運維
- 關於二維DP————站上巨人的肩膀
- 計算任意多邊形的面積(Android)Android
- 關於控制SVG描邊屬性縮放的神句vector-effect: non-scaling-strokeSVG
- 關於Spring生命週期控制的介面:SmartLifecycleSpring
- 關於Luthier CI 命名行模式模式
- 關於多賬套API的設計API
- 自己整理的關於windows圖形介面的問題Windows
- CAD繪圖工具中的正多邊形命令繪圖
- 關於GCD多工處理GC
- 關於fastAPI使用多併發ASTAPI
- 最新進展|關於Python治理模式的投票Python模式