0

私は DirectX をまったく初めて使用するので、最も基本的な Direct3D 構成で (学習目的で) 変換されていないプリミティブを描画したいと考えています。変換された頂点 (D3DFVF_XYZRHW フラグが設定された頂点) を持ついくつかのプリミティブを既に描画しました。

現在、変換されていない頂点で同じ出力を取得しようとしていますが、画面にビジュアルが表示されません。FVF を変更して頂点を調整しましたが、変換マトリックス (ワールド、ビュー、投影) をまだ設定していません。これらのマトリックスのいずれかを設定する必要がありますか? 行列が設定されていない場合、変換された頂点と同じようにすべてが機能すると思いますが、明らかにそうではありません。

デフォルトで表示されるエリア (ワールド座標) は? それを機能させるために何をしなければなりませんか?

これは基本的に私がしていることです:

struct Vertex
{
    float x, y, z;
    D3DCOLOR color;

    static const DWORD format = D3DFVF_XYZ | D3DFVF_DIFFUSE;
};


const Vertex vertices[] =  {
                           {0.0f, 0.8f, 0.5f, D3DCOLOR_XRGB(255, 255, 255)},
                           {0.8f, -0.8f, 0.5f, D3DCOLOR_XRGB(255, 255, 255)},
                           {-0.8f, -0.8f, 0.5f, D3DCOLOR_XRGB(255, 255, 255)}
                           };


pd3dDevice->CreateVertexBuffer(sizeof(vertices), 0, Vertex::format, D3DPOOL_DEFAULT, &pVB, NULL);

VOID* vertexData = 0;
pVB->Lock(0, sizeof(vertices), &vertexData, 0);
memcpy(vertexData, vertices, sizeof(vertices));
pVB->Unlock();



D3DMATRIX matrixIdentitiy;
ZeroMemory(&matrixIdentitiy, sizeof(matrixIdentitiy));
matrixIdentitiy._11 = 1.0f;
matrixIdentitiy._22 = 1.0f;
matrixIdentitiy._33 = 1.0f;
matrixIdentitiy._44 = 1.0f;

pd3dDevice->SetTransform(D3DTS_WORLD, &matrixIdentitiy);
pd3dDevice->SetTransform(D3DTS_VIEW, &matrixIdentitiy);
pd3dDevice->SetTransform(D3DTS_PROJECTION, &matrixIdentitiy);



pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 0.0f, 0);
pd3dDevice->BeginScene();

pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
pd3dDevice->SetRenderState(D3DRS_CLIPPING, FALSE);
pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_ALWAYS );

pd3dDevice->SetStreamSource(0, pVB, 0, sizeof(Vertex));
pd3dDevice->SetFVF(Vertex::format);
pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

pd3dDevice->EndScene();
pd3dDevice->Present(NULL, NULL, NULL, NULL);

前もって感謝します!

編集:今、私はそれを手に入れました。照明が有効になりました。愚かな初心者の間違いです。とにかく助けてくれてありがとう!

4

2 に答える 2