Ich bin absolut neu in DirectX und ich möchte einige nicht transformierte Primitive mit der einfachsten Direct3D-Konfiguration (für Lernzwecke) zeichnen. Ich habe bereits einige Primitive mit transformierten Vertices gezeichnet, das sind Vertices mit dem gesetzten D3DFVF_XYZRHW Flag.Am einfachsten transformierte Vertex-Zeichnung mit Direct3D
Jetzt versuche ich, die gleiche Ausgabe mit nicht transformierten Vertices zu bekommen, aber ich bekomme keine Visuals auf dem Bildschirm. Ich habe meine FVF geändert und die Scheitelpunkte angepasst, aber noch keine Transformationsmatrix (Welt, Ansicht, Projektion) festgelegt. Ist es notwendig, eine dieser Matrizen zu setzen? Ich würde annehmen, dass alles genauso funktioniert wie mit transformierten Vertices, wenn keine Matrizen gesetzt sind, aber das ist offensichtlich nicht der Fall.
Welcher Bereich (in Weltkoordinaten) ist standardmäßig sichtbar? Was muss ich tun, damit es funktioniert?
Dies ist im Grunde, was ich tue:
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);
Vielen Dank im Voraus!
EDIT: Jetzt habe ich es, Beleuchtung wurde aktiviert, dummer Anfänger Fehler. Danke für deine Hilfe trotzdem!
Guten Punkt, ich den Z-Buffer-Test, aber das Problem bleibt deaktiviert. –