DirectX 3D学习笔记(一)
?
DirectX 3D學(xué)習(xí)筆記(一)
Ⅰ、渲染狀態(tài)
設(shè)備的渲染狀態(tài)控制Direct3D設(shè)備的光柵化組件的行為。通過改變光柵渲染狀態(tài)屬性,可以設(shè)置使用何種方式來進行渲染著色,以及如何進行霧化等。
在Direct3D中我們可以通過IDirect3DDevice9::SetRenderState()函數(shù)來設(shè)置渲染狀態(tài)。
HRESULT SetRenderState(
D3DRENDERSTATETYPE State,
? DWORD Value
);
?
通過枚舉函數(shù)SetRenderState中的第一個參數(shù)D3DRENDERSTATETYPE,可以得到
所有可能的渲染狀態(tài)。
??
①??? 著色模式
Direct3D中的物體表面是有很多多邊形組成的,如三角形。當(dāng)渲染一個物體的多邊形
的時候,不同的著色模式在其表面是會產(chǎn)生不同的效果的。每一種著色模式?jīng)Q定了平面上的每個點的顏色和光照強度。通過SetRenderState函數(shù)的參數(shù)D3DRENDERSTATETYPE枚舉到的著色模式為D3DSHADEMODE,定義如下
?
Defines constants that describe the supported shading modes.
typedef enum D3DSHADEMODE
{ ??? D3DSHADE_FLAT = 1, ??? D3DSHADE_GOURAUD = 2, ??? D3DSHADE_PHONG = 3, ??? D3DSHADE_FORCE_DWORD = 0x7fffffff, } D3DSHADEMODE, *LPD3DSHADEMODE; ? 在上面得到的定義中,Direct3D主要給我們提供了兩種著色模式,平面著色和Gouraud著色。后面的兩種不需要考慮。 ? A、 平面著色 在平面著色模式下,Direct3D渲染一個多邊形的時候,把多邊形的第一個頂點的顏色 作為整個多邊形的顏色進行著色。在這種情況下,一個多邊形的所有像素的顏色值都等于該多邊形的第一個頂點的顏色值。而且如果這些多邊形是不共面的,在flat著色模式下渲染的三維圖形將出現(xiàn)明顯的。 ? B、 戈勞德著色 在戈勞德著色模式下,Direct3D渲染一個多邊形的時候,它會先用頂點法向量和燈光 參數(shù)計算每個頂點的顏色,然后在改多邊形的表面上進行線性插值,來得到每個像素的顏色值。 ? eg:gD3Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);//Gouraud eg:gD3Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT);??? //Flat ? ②??? 多邊形填充模式 在默認(rèn)的狀態(tài)下,Direct3D會把渲染好的多邊形完全顯示。但可能有時候不需要將全 部顯示,比如只要顯示所有的頂點,或者是所有的邊。同樣可以通過枚舉函數(shù)SetRenderState中的第一個參數(shù)D3DRENDERSTATETYPE,得到Direct3D的填充模式。 ??? typedef enum D3DFILLMODE { ??? D3DFILL_POINT = 1, ??? D3DFILL_WIREFRAME = 2, ??? D3DFILL_SOLID = 3, ??? D3DFILL_FORCE_DWORD = 0x7fffffff, } D3DFILLMODE, *LPD3DFILLMODE; ? ??? D3DFILL_POINT:點模式,繪制多邊形的每一個頂點 ??? D3DFILL_WIREFRAME:線模式,在多邊形的每個邊繪制一條線 D3DFILL_SOLID:面模式,也是默認(rèn)模式,對多邊形的面進行繪制填充 // 線模式 eg:gD3Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_POINT);
轉(zhuǎn)載于:https://www.cnblogs.com/leezhm/archive/2008/07/21/2560354.html
總結(jié)
以上是生活随笔為你收集整理的DirectX 3D学习笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于visual graph开发实时线损
- 下一篇: ASP.NET中常用的26个优化性能方法