私は 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);
前もって感謝します!
編集:今、私はそれを手に入れました。照明が有効になりました。愚かな初心者の間違いです。とにかく助けてくれてありがとう!