本教程介紹了匯入原始檔的網格的方法,使用的方式是dxut,但是,沒有dxut也可以使用網格。
在本教程中,你通過匯入乙個檔案中的模型將它繪製在視窗中,這個模型已經包含了經過座標對映的紋理。
(sdk root)\samples\c++\direct3d10\tutorials\tutorial09。
在源**中設定每個頂點是非常繁瑣的工作,因此,我們通常都是匯入已經製作好的模型。
網格就是一組預先定義好的頂點資料,這些資料常常還包含法線向量,顏色,材質和紋理座標等額外資訊。只需知道網格檔案的格式,就可以進行匯入和繪製。
dxut使用cdxutmesh10類處理網格, 它是對d3dx mesh類的封裝。這個類包含了匯入、繪製、銷毀乙個網格的方法。我們使用的檔案格式為.x檔案,有許多轉換器可以將其他格式的檔案轉換為.x格式。
要匯入乙個模型,我們首先需要建立乙個cdxutmesh10物件,本例中名為g_mesh,通常物件名稱應該與檔名稱匹配,這樣更容易將兩者聯絡起來。
1
cdxutmesh10 g_mesh;
然後呼叫create方法讀取x檔案並將它儲存到這個物件中。create方法需要x檔案的名稱、頂點格式,格式中的頂點數量作為引數。還有乙個名為optimize的可選引數,它可以呼叫d3dx函式重新排列網格的面和頂點,這可以提高繪製的效能。
本例中,我們匯入的檔名稱為「tiny.x」。定義這個網格的頂點格式包含頂點座標,法線和紋理座標。我們必須指定輸入格式進行匹配,如下所示
1
2
3
4
5
6
7
// define the input layout
const
d3d10_input_element_desc layout =
,
,
,
};
之後,我們呼叫create方法匯入模型。最後乙個引數是頂點格式的元素數量。因為包含座標、法線和紋理座標,所以為3。
1
2
// 載入網格
v_return( g_mesh.create( pd3ddevice, l
"tiny.x"
, (d3d10_input_element_desc*)layout, 3 ) );
如果不出錯,現在g_mesh就包含了新匯入的網格的頂點快取、索引快取、紋理和材質,然後我們就可以進行繪製了。
在前面的教程中,因為我們必須完全控制頂點快取和索引快取,所以每一幀都需要正確地建立它們。但是使用模型時這些元素被抽象了,所以我們只需提供繪製所需的effects technique,它會幫你完成所有的工作。
和前乙個教程的區別在於我們移除了開始繪製立方體前的ond3dframerender部分**,用網格繪製呼叫代替。在繪製網格前設定正確的輸入格式是乙個好習慣,這能確保網格的格式與輸入編譯器匹配。
1
2
3
4
//
// set the vertex layout
//
pd3ddevice->iasetinputlayout( g_pvertexlayout );
實際繪製**是通過呼叫cdxutmesh10類中的render方法實現的。當technique的快取正確鏈結之後就可以進行繪製了,此方法的引數為d3d10device,effect和effect中的technique。
1
2
3
4
//
// 繪製網格
//
g_mesh.render( pd3ddevice, g_peffect, g_ptechnique );
如果模型的世界矩陣正確,那麼我們就可以看到前乙個教程中的立方體被乙個更複雜的模型代替了。注意:這個模型比立方體大得多,所以需要進行縮放才能讓模型匹配螢幕大小。
和所有物件一樣,cdxutmesh10物件必須在使用後進行銷毀,這是通過呼叫destroy方法實現的。
1
g_mesh.destroy();
Direct3D9 建立裝置
在d3d9中,建立裝置前要先呼叫direct3dcreate9建立d3d9物件,再呼叫idirect3d9 createdevice建立裝置物件。應用程式可以對硬體查詢來檢測硬體支援的d3d裝置型別。本節講述了列舉顯示介面卡和選擇direct3d裝置等內容。應用程式必須執行一系列任務來選擇適當的d3...
Direct3D9的擴充套件紋理格式
klayge遊戲引擎 在winxp下,即使gpu支援d3d10 也只能用d3d9的api。但實際上各個廠商都對d3d9做了一些擴充套件,把部分d3d10 的特性暴 露給了d3d9 api。以下是一些特殊的紋理格式,通過fourcc的方式來使用。通過checkdeviceformat可以檢測是否支援該...
Direct3D 9學習筆記 3 基本頂點繪製
如下頂點資料結構 struct vertex vertex float x,float y,float z float x,y,z static const dword fvf 然後建立乙個頂點快取 device createvertexbuffer 3 sizeof vertex size in ...