DirectXを使った描画

描画の手順

描画の処理を行う際の手順として下記の事が必要です。

1.描画シーンの開始と終了
pDevice->BeginScene();
// ~描画処理~
pDevice->EndScene();


DirectX9における決まりとして描画処理をBeginSceneとEndSceneの間で行うする必要があります。
この間以外では描画処理を行うことが出来なくなっています。
試しにDrawPrimitiveUP関数の呼び出しをEndSceneの後にしてみると描画されないことが確認できます。

 

2.バックバッファのクリア(背景色の設定)
pDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0x00000000, 1.0f, 0);


今回の処理ではバックバッファを黒く塗りつぶしています。
D3DCLEAR_TARGETは現在の描画ターゲットをクリア対象として指定しています。
D3DCLEAR_ZBUFFERやD3DCLEAR_STENCILを|(OR演算子)で指定することでDepthやStencilを同時にクリアすることも出来ます。
0x00000000は色の指定になっていて上位から8bit毎にA, R, G, Bという順番で指定が出来ます。

 

3.頂点フォーマットの構造の指定
#define FVF_CUSTOM2D    (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
pDevice->SetFVF(FVF_CUSTOM2D);


D3DFVF_XYZRHWを指定するとトランスフォーム済みの座標を含みます。
D3DFVF_DIFFUSEを指定すると頂点カラーを含みます。

 

4.描画処理
pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, vertices, sizeof(SimpleVertex));


今回は四角形を1つ描画しています。

D3DPT_TRIANGLESTRIPは頂点を描画する時のルールを指定しています。
今回は単純を四角形を1つ描画する時に楽なD3DPT_TRIANGLESTRIPを指定しています。
2は描画するプリミティブの数を指定しています。
今回は四角形ですので三角形のポリゴンが2つで成り立っているため2になります。
次のVertexは頂点データ、最後のsizeof(SimpleVertex)は頂点1つ辺りのサイズを指定しています。

 

5.モニターへの反映
pDevice->Present(NULL, NULL, NULL, NULL);


描画処理が終了してバックバッファの絵が完了した後はモニターにそれを表示する必要があります。

Presentではフリップを行っています。
フリップとはバックバッファを実際に表示を行うプライマリバッファに転送する処理の事です。
その為、Presentを呼び出さない限りは描画した内容が画面に表示されません。
何故、一度バックバッファに書き込んでから転送して表示しているのかと言うと
直接プライマリバッファを書き換えて描画途中の絵が画面に表示されてしまう現象を防ぐためです。

 

これで矩形の描画が出来るようになりました。
矩形が描画できるようになればブロック崩しや簡単なゲームであれば作ることもできます。

次回は頂点バッファとインデックスバッファについて書いていきます。

1 2

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です