前回の『初めてのDirectX9』でDirectXの初期化が完了しました。
今回はついに実際に画面に絵を出してみようと思います。
いきなり最初から3Dは難しいので先ずは2Dの単純なポリゴンを描画していきます。
初めての描画
描画に最低限必要なものとして頂点バッファというものがあります。
頂点バッファとは描画する座標や色、テクスチャーUV等の様々な指定をするためのバッファです。
今回は必要最低限のものだけを使用して実装していきます。
頂点フォーマット
#define FVF_CUSTOM2D (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) struct SimpleVertex { float x, y, z; float rhw; DWORD color; };
頂点フォーマットとしては単純で座標とカラーのみを指定しています。
x, y, zで表示する座標を指定します。 rhwはトランスフォーム済み頂点だという事を表すために必要な値になります。
colorはそのままでカラーを指定する値です。
FVF_CUSTOM2Dに関しては後述します。
単純な描画処理
void Render(void) { IDirect3DDevice9* pDevice = GetDirect3DDevice(); // 描画シーンの開始 pDevice->BeginScene(); // バックバッファのクリア pDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0x00000000, 1.0f, 0); const SimpleVertex vertices[4] = { { 10.0f, 10.0f, 0.0f, 1.0f, 0xffffffff }, { 50.0f, 10.0f, 0.0f, 1.0f, 0xffffffff }, { 10.0f, 50.0f, 0.0f, 1.0f, 0xffffffff }, { 50.0f, 50.0f, 0.0f, 1.0f, 0xffffffff }, }; // 頂点フォーマットの指定 pDevice->SetFVF(FVF_CUSTOM2D); // 描画 pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, vertices, sizeof(SimpleVertex)); // 描画シーンの終了 pDevice->EndScene(); // モニターに絵を表示する pDevice->Present(NULL, NULL, NULL, NULL); }
今回の処理では黒い背景の画面で左上の方に白い四角形を1つ表示するプログラムになっています。
Render関数を呼び出すと(10, 10), (50, 50)の範囲に四角形が描画されます。
Render関数はWinMainのメインループ内で呼び出すことになります。
// メインループ while( !IsQuitMessage() ) { // メッセージの更新が無い時にゲームの処理を動かす if( !UpdateWindowMessage() ) { // ゲームの更新や描画処理はここで行う Render(); } }
次のページでは各処理の説明をしていきます。
1 2