ややプログラム紀行

博士2年のプログラムに関する日記

D3DVERTEXELEMENT9

うぇい・・・やっと頂点バッファの情報の獲得に成功したぜ・・・

やり方は

①とりあえずID3DXMESHを作る

ID3DXBaseMesh::GetDeclarationを呼ぶ

③②でゲットしたD3DVERTEXELEMENT9を解析する

具体的には・・・(ぶっちゃけMSDNとやらを見たほうが速い)

・GetDeclarationにD3DVERTEXELEMENT9構造体のMAX_FVF_DECL_SIZE(定数)分の配列を渡す

・D3DVERTEXELEMENT9の中身は

typedef struct D3DVERTEXELEMENT9 {

WORD Stream;

WORD Offset;

BYTE Type;

BYTE Method;

BYTE Usage;

BYTE UsageIndex;

} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;

こんなかんじ(コピペ)

・なんで配列を渡すかというと、例えばその頂点バッファには「位置」「法線」「色」「テクスチャ座標」「位置」「法線」「色」・・・てな感じでデータが並んでたとすると、「位置」~「テクスチャ座標」で1塊と考えられる

これを、D3DVERTEXELEMENT9的に表すと、

要素0・・・「位置」

要素1・・・「法線」

要素2・・・「色」

要素3・・・「テクスチャ座標」

要素4・・・D3DDECL_END(おわりを表す)

要素5・・・中身なし

残りの要素すべて中身なし

というふうに情報が格納される

・この構造体のメンバー変数1つ1つはMSDNで参照してくだせー

・まとめると、この構造体を見て、欲しい情報を確認する

終わりはD3DDECL_ENDで判別する・・・てな感じだと思う

④ID3DXBaseMesh::LockVertexBufferで頂点バッファーの場所を知り、

⑤ID3DXBaseMesh::UnlockVertexBufferでアンロックする

こういう流れです

もっといいやり方がある気がしなくもない・・・

あと頂点の追加ですが、動的な頂点バッファとインデックス バッファの使い方に書いてあるっぽい

これも参考になりそう(まるぺけ

なんかリンク多くなったw