板ポリゴンの表示

その2 座標変換済み頂点で2D板ポリゴンを描画

板ポリゴン表示するだけなのに長かった・・・

とりあえずほぼサンプルの通り書いてみて動かした。

struct CUSTOMVERTEX{  
    float x, y, z;    // 頂点座標 
    float rhw;        // 除算数 
    DWORD dwColor;    // 頂点の色 
    float u, v;        // テクスチャ座標 
};

CUSTOMVERTEX v[4] = {
    {200.0f, 100.0f, 0.0f, 1.0f, 0xffffffff, 0.0f, 0.0f}, 
    {200.0f, 200.0f, 0.0f, 1.0f, 0xffffffff, 0.0f, 1.0f}, 
    {100.0f, 100.0f, 0.0f, 1.0f, 0xffffffff, 1.0f, 0.0f}, 
    {100.0f, 200.0f, 0.0f, 1.0f, 0xffffffff, 1.0f, 1.0f} 
}; 

HRESULT hr;
IDirect3DVertexBuffer9* pVertex;
hr = m_pd3dDevice->CreateVertexBuffer(
    sizeof(CUSTOMVERTEX)*4,
    D3DUSAGE_WRITEONLY,
    FVF_CUSTOM,
    D3DPOOL_MANAGED,
    &pVertex,
    NULL
); 

void *pData;
hr = pVertex->Lock(0, sizeof(CUSTOMVERTEX)*4, (void**)&pData, 0);

if(hr == D3D_OK){
    memcpy(pData, v, sizeof(CUSTOMVERTEX)*4);
    pVertex->Unlock();
}

m_pd3dDevice->BeginScene();        // 描画開始
m_pd3dDevice->SetStreamSource(0, pVertex, 0, sizeof(CUSTOMVERTEX));
m_pd3dDevice->SetFVF(FVF_CUSTOM);
m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
m_pd3dDevice->EndScene();        // 描画終了

m_pd3dDevice->Present(NULL, NULL, NULL, NULL);

実行結果



正方形のポリゴンが表示されただけ。