3.三角形の描画


0.描画するデータの用意

まず三角形を描画する為に、必要なデータを定義します。
データの定義
LPDIRECT3DVERTEXDECLARATION9 g_pVertDec = 0;    //!<頂点宣言のポインタ
LPDIRECT3DVERTEXBUFFER9 g_pVB = 0;              //!<頂点バッファのポインタ

//!頂点定義データ
D3DVERTEXELEMENT9 g_decl[] =
{
    {0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0},
    {0, sizeof(float)*4, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
    D3DDECL_END()
};

//!自分用の頂点構造体
struct MyVertex
{
    float x_, y_, z_, rhw_;
    DWORD color_;
};

//!頂点データ
MyVertex g_verts[] =
{
    {150.0f, 50.0f, 0.f, 1.f, 0xffffffff,},
    {250.0f, 250.0f, 0.f, 1.f, 0xff000000,},
    {50.0f, 250.0f, 0.f, 1.f, 0xff000000,},
};
上の方で宣言しているのはいつものDirectX用のインターフェースです。
その次に頂点宣言データの配列があります。
これはある頂点データを使って描画する為にそのデータのどの部分が何のデータなのかをDirectXに伝えるために使用します。
今回はとりあえず2D描画ということで、座標変換済みの座標と色情報を持っていると宣言しています。
その次に実際に描画に使用する頂点データがあります。
まず頂点宣言で宣言した通りのメンバを持っている構造体を定義します。
その後で描画する為の実際のデータとなるMyVertexの配列で三角形を定義しています。
と、とりあえず描画する為のデータはこれで十分なので、次は実際に描画する為にこれらのデータをDirectXで使用できるようにする処理を行います。
(この辺はもうちょっと単純な方法もありますが、今後の為にこの形でやっていきます。)
DirectXが扱いやすいようにいくつか処理する
//頂点宣言の作成
LPDIRECT3DDEVICE9 pDev = graphic_.GetDevice();
if(FAILED(pDev->CreateVertexDeclaration(g_decl, &g_pVertDec)))
{
    return false;
}

//頂点バッファの作成
if(FAILED(pDev->CreateVertexBuffer(sizeof(MyVertex)*3, 0, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_MANAGED, &g_pVB, 0)))
{
    return false;
}

//頂点バッファへデータを設定
void* pVs = 0;
g_pVB->Lock(0, sizeof(MyVertex)*3, &pVs, 0);
memcpy(pVs, g_verts, sizeof(MyVertex)*3);
g_pVB->Unlock();
まず上で定義した頂点宣言データをDirectXに渡して、頂点宣言オブジェクトを生成します。
次に上で定義した頂点データを描画時にDirectXが扱いやすいように頂点バッファにコピーします。
ようやく描画する為の準備が出来たので、本題の描画へ進みます。
描画
    LPDIRECT3DDEVICE9 pDev = graphic_.GetDevice();

    //頂点定義の設定
    pDev->SetVertexDeclaration(g_pVertDec);

    //使用するデータの設定
    pDev->SetStreamSource(0, g_pVB, 0, sizeof(MyVertex));

    //設定されたデータを使って描画
    pDev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 1);
と、ここまで色々と準備してきた分、描画自体は非常に単純です。
BeginScene()、EndScene()の間で用意したデータを設定して、DrawPrimitive()を呼び出すだけです。
と、駆け足で見てきましたがこれで2Dの三角形が描けました。
ちょっと変えると四角形も描けるので興味がある方はやって見てください。
次回は3Dの三角形を描画すると思います。
今回のソース。
戻る。