IDirect3DVertexBuffer9のラッパークラス

今回は頂点バッファのラッパークラスを作ってみました。
作っておくと後々便利だと思います。

このクラスはテンプレートを使っており、
FVFコードの組み合わせをテンプレート引数として指定することで、
頂点データの構造体を定義してくれます。

CD3DDevice device;

CD3DVertexBuffer< D3DFVF_XYZ > vertex_buffer1;
CD3DVertexBuffer< D3DFVF_XYZ >::Vertex* v1;

vertex_buffer1.Activate( device, 3 );
v1 = vertex_buffer1.Lock( 0, 3 );
v1[ 0 ].px = -1.0f, v1[ 0 ].py = -1.0f, v1[ 0 ].pz = 0.0f;
v1[ 1 ].px = 1.0f, v1[ 1 ].py = -1.0f, v1[ 1 ].pz = 0.0f;
v1[ 2 ].px = 0.0f, v1[ 2 ].py = 1.0f, v1[ 2 ].pz = 0.0f;
vertex_buffer1.Set();
vertex_buffer1.Render( D3DPT_TRIANGLELIST, 0, 1 );

CD3DVertexBuffer< D3DFVF_XYZ | D3DFVF_DIFFUSE > vertex_buffer2;
CD3DVertexBuffer< D3DFVF_XYZ | D3DFVF_DIFFUSE >::Vertex* v2;

vertex_buffer2.Activate( device, 3 );
v2 = vertex_buffer2.Lock( 0, 3 );
v2[ 0 ].px = -1.0f, v2[ 0 ].py = -1.0f, v2[ 0 ].pz = 0.0f;
v2[ 0 ].diffuse.color = 0xffff0000;
v2[ 1 ].px = 1.0f, v2[ 1 ].py = -1.0f, v2[ 1 ].pz = 0.0f;
v2[ 1 ].diffuse.color = 0xffff0000;
v2[ 2 ].px = 0.0f, v2[ 2 ].py = 1.0f, v2[ 2 ].pz = 0.0f;
v2[ 2 ].diffuse.color = 0xffff0000;
vertex_buffer2.Set();
vertex_buffer2.Render( D3DPT_TRIANGLELIST, 0, 1 );


こんな感じで使用できます。
実際には app.cpp の 200 行目あたりでこの処理を行っていますので、
参考にしてください。


また、デバイスのコールバックインターフェースクラスを作成しました。
このクラスを継承して、そのクラスのポインタをデバイスクラスに登録すると、
デバイスに何かあったときに必要な処理が自動で呼び出されます。
今のところデバイスのロストとリセットに対応しています。
こちらは d3d_device_callback.h を見てみてください。
ちなみに CD3DVertexBuffer もこれを継承してます。

次はスプライトとデバッグ用フォントを追加したいと思います。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です