DirectX9 3D 快速上手 4

2021-03-31 20:41:18 字數 4059 閱讀 4649

directx9 3d

快速上手4

bysssa2000

4/17/2005

接下來我們要使用

mesh

讀入.x

檔案,關於

.x檔案,其實可以說很多,我們可以用外部的工具例如

3ds max

來建立.3ds

檔案,然後利用微軟提供給我們的工具轉換成

.x檔案,如果你同時會用

3ds你也許會問,那材質怎麼辦?

你不用擔心,

.x檔案能自動的包含材質,和動畫,所以利用

mesh

我們可以方便的八我們在

3ds max

的做品用在遊戲中。

.x檔案允許自定義的擴充套件,當然這個我們在以後的內容也會講到,我們先看怎麼使用,順便提一句,還有一種用得比較多的檔案格式

.md3

格式的檔案,也就是

quake3

使用的檔案,如果有機會我也會講到。

關於3ds

檔案和.x

轉換可以參看

gameres

**的文章

接下來的過程簡單的讓你無法相信,請看:

private mesh mesh = null; //

建立mesh物件

private material meshmaterials;//

用於儲存材質

private texture meshtextures;//

用於儲存紋理

private

void loadmesh(string file)}}

}如果你覺得這裡**比較混亂,沒有關係,我們來理一理,首先要說的是

mesh

類還有兩個主要的靜態方法可以載入外部模型。這兩個方法分別是

mesh.formfile

和mesh.fromstream

。兩個方法本質上來說都是一樣的,

stream

方法有更多的過載以適應不同大小的流。

mesh.formfile

最簡單,我們就先只介紹這個,這個方法有很多過載的版本,我們用的是引數最多的乙個,這樣其他的也都好理解了:

public staticmeshfromfile(

stringfilename, //

檔名meshflagsoptions,//

控制著去**以及如何載入資料

devicedevice,//

渲染mesh

的device

outgraphicsstreamadjacency,//

儲存每個面相鄰的3個面

outextendedmaterialmaterials,//

儲存了普通的

direct3d

材質和乙個載入為紋理的字串,

常是使用的紋理或資源檔名

outeffectinstanceeffects //

描述了用於

mesh

的hlsl

材質檔案和值。

);我們使用的是乙個有

4引數的方法:

public staticmeshfromfile(

stringfilename,

meshflagsoptions,

devicedevice,

outextendedmaterialmaterials

);接下來,如果讀入的這個

.x檔案有材質或者紋理,就根據材質和紋理的大小建立陣列以儲存這些紋理和材質。

因為mesh

中可能有許多不同的子集,所以需要分別建立乙個材質和紋理的陣列以滿足每乙個子集的需要。

mesh

會自動地把每乙個子集和這些子集的材質紋理一一對座。

這樣我們就完成了乙個

loadmesh

函式,這個函式我們可以用在以後任何需要讀入

.x檔案的地方,十分的方便。

下面我們來看看我們的成果,當然我們還需要在繪圖的地方加幾句:

for (int i = 0; i < meshmaterials.length; i++)

好了,現在我們可以在以往的框架的基礎上編譯一下了,我們可以看到已經讀入了乙個

.x檔案,不管怎麼樣

都是值得慶賀的。我們再看看

sdk

tutorial6

的例子後,

發現這個程式的結果可以旋轉,其實也很好實現,我們只需要設定一下旋轉矩陣就可以了,就像上一張我們講的那樣,在上面那段for前面加上一句就可以了:

device.transform.world = matrix.rotationyawpitchroll(yaw, pitch, roll) * matrix.translation(x, y, z);

好了這樣我們也就達到目的了,你也可以隨自己的意思設定變換矩陣,很

cool

吧?好了,下面是完整的**,如果大家有什麼意見,發到我的

blog

上吧。大家一起進步。

using

system;

using

system.drawing;

using

system.collections;

using

system.***ponentmodel;

using

system.windows.forms;

using

system.data;

using

microsoft.directx;

using

microsoft.directx.direct3d;

namespace

chapter5code

//////

we will initialize our graphics device here

///public

void initializegraphics()

private

void loadmesh(string file)}}

}private

void setupcamera()

protected

override

void onpaint(system.windows.forms.painteventargs e)

private

void drawmesh(float yaw, float pitch, float roll, float x, float y, float z)

}///

///clean up any resources being used.

///protected

override

void dispose( bool disposing )

}base.dispose( disposing );

}#region

windows form designer generated code

//////

required method for designer support - do not modify

///the contents of this method with the code editor.

///private

void initialize***ponent()

#endregion

//////

///static

void

main

() }}

}其實我們都已經發現,到目前為止我們的程式都是遵循乙個固定的框架,有時候你發現程式很長,其實從框架角度來看,就沒那麼長了,怕看長**的人可以注意一下,同時很多**都是通用的。下次學習怎麼操控

mesh

by sssa2000

4/17/2005

DirectX9 3D快速上手 3

directx9 3d 快速上手3 by sssa2000 4 15 2005 我們這裡暫時先跳過,乏味的索引緩衝和深度緩衝的內容,先看看怎麼在 3d空間中實現乙個東西,給自己來點成就感。正好sdk 的嚮導也是這麼安排的,呵呵,那我們就繼續從嚮導出發吧,以 tutorial 3 為例子。這個例子主要...

webpack4快速上手

1.在專案根目錄cnpm init y初始化。生成package.json檔案 2.在專案裡面使用cnpm安裝webpack 3.需要在根目錄下新建webpack.config.js檔案 在其裡面配置暴露物件 module.exports 4.在根目錄下新建src index.js檔案 因為此時執行...

Extjs4快速上手四 實現選單

原文 這幾天狀態不佳,雜事太多有些煩心,這一次就少講點吧。本次將主要講extjs樹形選單的實現。在很多系統裡邊,樹形選單被廣泛應用,主要因為其有清晰的層次結構。記得最早見到的樹形選單是通 過實現的,非常簡單。之後用c 的現成控制項拖拽了乙個,當時還沾沾自喜。再後來在學習師兄的乙個通用後台 時,看到了...