ポリゴン描画(四角形)

2Dゲームで扱うポリゴン

通常、2Dゲームでは矩形(四角形)を使って画像表示を行うので、扱うポリゴンの形は四角形が基本となると考えてよい。
しかし、Direct Graphicsでは四角形のポリゴンを表示することができないので、三角形ポリゴンを2つ組み合わせて四角形を形成し、組み合わせた2つの三角形ポリゴンを1つの四角形ポリゴンとして利用する。
三角形が2つなら頂点は6つ必要だが、頂点を共有することにより、4つの頂点で表現が可能である。

備考

四角形ポリゴンを描画する

(3)で作成したプログラムを修正し、四角形ポリゴンを描画する手順を解説する。

1.頂点情報配列を変更

頂点情報が4つになったため、配列の要素数を4に修正する。

// グローバル変数
HWND hWnd;                              // ウィンドウハンドル
BOOL g_appActive = FALSE;               // ウィンドウの状態
char szWinName[] = "Exer004";           // ウィンドウクラス用文字列
char szWinTitle[] = "DirectX Graphicsでの2D表示"; // ウィンドウクラス用文字列
LPDIRECT3D8 gl_lpD3d = NULL;            // Direct3D8インターフェイス
LPDIRECT3DDEVICE8 gl_lpD3ddev = NULL;   // Direct3DDevice8インターフェイス
D3DPRESENT_PARAMETERS gl_d3dpp;         // ディスプレイパラメータ
BYTE g_FrameNo = START_INIT;            // フレーム選択用
BYTE gl_KeyTbl[256];                    // キーボードの状態を格納
TLVERTX VertexDataTbl[4];               // 頂点情報配列

2.頂点情報初期化関数を修正

4つ目の頂点座標を初期化するよう、頂点情報初期化関数(InitVertex関数)を修正する。

//----------------------------------------------------------------------------------------
// 関数名 : InitVertex() 
// 機能概要: 頂点データを格納する
//----------------------------------------------------------------------------------------
void InitVertex(LPTLVERTEX v)
{
    //頂点配列をゼロクリア
    ZeroMemory(v, sizeof(TLVERTX));
    //---頂点A1のデータ定義
    v[0].x      =  100.0f;                     // 頂点X座標
    v[0].y      =  100.0f;                     // 頂点Y座標
    v[0].z      =  0.0f;                       // 頂点Z座標
    v[0].rhw    =  1.0f;                       // 2Dを扱うときの値
    v[0].color  =  D3DCOLOR_XRGB(0,0,255);     // 頂点色
    //---頂点A2のデータ定義
    v[1].x      =  400.0f;
    v[1].y      =  100.0f;
    v[1].z      =  0.0f;
    v[1].rhw    =  1.0f;
    v[1].color  =  D3DCOLOR_XRGB(0,0,255);
    //---頂点A3のデータ定義
    v[2].x      =  400.0f;
    v[2].y      =  400.0f;
    v[2].z      =  0.0f;
    v[2].rhw    =  1.0f;
    v[2].color  =  D3DCOLOR_XRGB(0,0,255);
    //---頂点A4のデータ定義
    v[3].x      =  100.0f;
    v[3].y      =  400.0f;
    v[3].z      =  0.0f;
    v[3].rhw    =  1.0f;
    v[3].color  =  D3DCOLOR_XRGB(0,0,255);
}

《解説》

3.描画処理を修正

ポリゴンの描画はDrawPrimitiveUPメソッドを使って行われる。ここでポリゴン数を2にすれば、頂点情報から2つのポリゴンを描画する。頂点情報は4つなので、四角いポリゴンに見える。

//-----------------------------------------------------------------------------
// 関数名 : StartFrame()
// 機能概要: スタート画面処理
//-----------------------------------------------------------------------------
void StartFrame(void)
{
    /* 描画処理 */
    // 四角形ポリゴンをバックバッファに転送
    gl_lpD3ddev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, VertexDataTbl, sizeof(TLVERTX));

    // リターンキーが押されたら、ゲーム開始
    if ( gl_KeyTbl[VK_RETURN] & 0x80 ) g_FrameNo = GAME_INIT;

}

《解説》

※動作確認

  1. (3)で作成したプログラムに上記修正を行い、青い四角形が表示されることを確認する
  2. ポリゴンの頂点座標を変更し、思い通りの場所に思い通りの形で四角形が表示されるかどうかを確認する

BACK(ポリゴンの描画(三角形)) NEXT(頂点情報初期化関数について)