Directx----Meshes
16108 ワード
ID 3 DXmeshインタフェースについては前述しましたが、単純なジオメトリを作成するためにD 3 DXCreateを使用しただけです.この記事では、ID 3 DXmeshインタフェースについて詳しく説明します.
ID 3 DXmeshは、ID 3 DXBaseMeshから継承されています.ID 3 DXBaseMeshにはvertex bufferとindex bufferが含まれています.この二つの組み合わせによって、任意の三角形と任意の三角形の組み合わせを描くことができます.vertex bufferとindex bufferをID 3 DXBaseMeshから抽出するには、次の方法を使用します.
HRESULT ID3DXMesh::GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* vertexBuf);
HRESULT ID3DXMesh::GeIndexBuffer(LPDIRECT3DindexBUFFER9* indexBuf);
ID 3 DXmesh自身も一連の方法を定義した.
(1). GetFVF():頂点に戻るFVF
(2). GetNumVertices():頂点の数を返します.
(3). GetNumbytesPreVertex():各頂点のバイト数を返します.
(4). GetNumFaces():三角形の数を返します.
3 Dグラフィックスでは、メッシュは一連の共面ポリゴンから構成されています.Direct 3 Dでは、メッシュを処理するためのいくつかのインタフェースが提供する、その中で最も一般的なものはID 3 DXmeshである.このインタフェースを用いるメッシュデータをロードし、メッシュの各種情報を得ることができる.
飛行機、花瓶、このような実体をモデルと呼び、このようなモデルを生成する過程をモデリングと呼ぶ.Direct 3 D利用xファイルでモデルを保存します.
1つ表示します.xファイルは、実は簡単です:インポート.xファイル、入手.xファイルのMaterialとTextureに関する情報を使用して、オブジェクトをレンダリングします.
I:まず、いくつかのレンダリングに必要な変数を宣言します.メッシュ、マテリアル、テクスチャ
II. 次に1つインポートする.xファイル.D 3 DXLoadMeshFromXインタフェースを利用して、Meshを得ることができます
III:上から出たものを利用して、MaterialとTextureをセットする
III:カメラ、レンダリングパラメータなどを設定してからモデルを表示できます
1. Geometry Info
ID 3 DXmeshは、ID 3 DXBaseMeshから継承されています.ID 3 DXBaseMeshにはvertex bufferとindex bufferが含まれています.この二つの組み合わせによって、任意の三角形と任意の三角形の組み合わせを描くことができます.vertex bufferとindex bufferをID 3 DXBaseMeshから抽出するには、次の方法を使用します.
HRESULT ID3DXMesh::GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* vertexBuf);
HRESULT ID3DXMesh::GeIndexBuffer(LPDIRECT3DindexBUFFER9* indexBuf);
ID 3 DXmesh自身も一連の方法を定義した.
(1). GetFVF():頂点に戻るFVF
(2). GetNumVertices():頂点の数を返します.
(3). GetNumbytesPreVertex():各頂点のバイト数を返します.
(4). GetNumFaces():三角形の数を返します.
2. .x File
3 Dグラフィックスでは、メッシュは一連の共面ポリゴンから構成されています.Direct 3 Dでは、メッシュを処理するためのいくつかのインタフェースが提供する、その中で最も一般的なものはID 3 DXmeshである.このインタフェースを用いるメッシュデータをロードし、メッシュの各種情報を得ることができる.
飛行機、花瓶、このような実体をモデルと呼び、このようなモデルを生成する過程をモデリングと呼ぶ.Direct 3 D利用xファイルでモデルを保存します.
3.モデルを表示
1つ表示します.xファイルは、実は簡単です:インポート.xファイル、入手.xファイルのMaterialとTextureに関する情報を使用して、オブジェクトをレンダリングします.
I:まず、いくつかのレンダリングに必要な変数を宣言します.メッシュ、マテリアル、テクスチャ
1
ID3DXMesh
*
Mesh
=
0
;
2
std::vector
<
D3DMATERIAL9
>
Mtrls(
0
);
3
std::vector
<
IDirect3DTexture9
*>
Textures(
0
);
II. 次に1つインポートする.xファイル.D 3 DXLoadMeshFromXインタフェースを利用して、Meshを得ることができます
1
HRESULT hr
=
0
;
2
3
//
Load the XFile data.
4
ID3DXBuffer
*
adjBuffer
=
0
;
5
ID3DXBuffer
*
mtrlBuffer
=
0
;
6
DWORD numMtrls
=
0
;
7
hr
=
D3DXLoadMeshFromX(
8
_T(
"
bigship1.x
"
),
9
D3DXMESH_MANAGED,
10
Device,
11
&
adjBuffer,
12
&
mtrlBuffer,
13
0
,
14
&
numMtrls,
15
&
Mesh);
III:上から出たものを利用して、MaterialとTextureをセットする
1
if
( mtrlBuffer
!=
0
&&
numMtrls
!=
0
)
2
{
3
D3DXMATERIAL
*
mtrls
=
(D3DXMATERIAL
*
)mtrlBuffer
->
GetBufferPointer();
4
for
(
int
i
=
0
; i
<
numMtrls; i
++
)
5
{
6
//
the MatD3D property doesn't have an ambient value set
7
//
when its loaded, so set it now:
8
mtrls[i].MatD3D.Ambient
=
mtrls[i].MatD3D.Diffuse;
9
//
save the ith material
10
Mtrls.push_back( mtrls[i].MatD3D );
11
//
check if the ith material has an associative texture
12
if
( mtrls[i].pTextureFilename
!=
0
)
13
{
14
//
yes, load the texture for the ith subset
15
IDirect3DTexture9
*
tex
=
0
;
16
LPCWSTR lpTmp
=
0
;
17
lpTmp
=
ConvetASCIIToUnicode(mtrls[i].pTextureFilename);
18
D3DXCreateTextureFromFile(
19
Device,
20
lpTmp,
21
&
tex);
22
//
save the loaded texture
23
Textures.push_back( tex );
24
}
25
else
26
{
27
//
no texture for the ith subset
28
Textures.push_back(
0
);
29
}
30
}
31
III:カメラ、レンダリングパラメータなどを設定してからモデルを表示できます
for
(
int
i
=
0
; i
<
Mtrls.size(); i
++
)
{
Device
->
SetMaterial(
&
Mtrls[i] );
Device
->
SetTexture(
0
, Textures[i]);
Mesh
->
DrawSubset(i);
}