私はDirectXには絶対に新しく、最も基本的なDirect3D構成(学習目的のため)を持つ変換されていないプリミティブを描きたいと思います。私はすでに変換された頂点を持つプリミティブを描画しました。つまり、D3DFVF_XYZRHWフラグが設定された頂点です。Direct3Dで最も基本的な変換頂点描画
今、変換されていない頂点で同じ出力を得ようとしていますが、画面上にビジュアルは表示されません。私は自分の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);
ありがとう!
EDIT:これで、ライティングが有効になりました。初心者の間違いです。とにかく助けてくれてありがとう!
良い点、私はzバッファテストを無効にしますが、問題はまだ残っています。 –