在用Directx編寫GUI類時,考慮到一個問題:如何讓界面視角不發生變化?也就是說當你遊戲內的非UI部分隨着視角座標的轉換而轉換時,讓UI界面始終朝向你?
一個可行的解決方法是:不讓UI界面在D3D中間進行矩陣轉換。這個方法可以通過設置靈活頂點格式(FVF)爲D3DFVF_XYZRHW來實現,下面是關於頂點格式的幾個說明(可以查看Directx的SDK,此部分內容參考過網友提供的文章,將在下一篇中轉載該網友文章):
1. D3DFVF_XYZ:頂點的三維座標(分別是XYZ),它說明頂點有位置,將由Direct3D對其進行矩陣變換;
2. D3DFVF_XYZRHW:RHW,與D3DFVF_XYZ不同的是:它說明頂點有位置且已經過矩陣變換,不再由Direct3D對它進行矩陣變換;
3. D3DFVF_DIFFUSE:表示頂點格式中有漫反射顏色;
4. D3DFVF_NORMAL:表示頂點有法線向量;
5. D3DFVF_TEXc:表示頂點有紋理座標,c可以是1至8,表示有多少套紋理座標;
在上面的幾個屬性裏,D3DFVF_XYZRHW和D3DFVF_XYZ、D3DFVF_NORMAL不能同時存在,因爲後面的兩個標誌和前面這個是有衝突的,比如以下的設置是可以的:
1. D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;
2. D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;
我們在寫GUI類時,通常是用D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;而在繪製遊戲場景之類的圖形時,一般用D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1。