Je suis absolument nouveau dans DirectX et j'aimerais dessiner des primitives non-transformées avec la configuration Direct3D la plus basique (à des fins d'apprentissage). J'ai déjà dessiné des primitives avec des sommets transformés, c'est-à-dire des sommets avec le jeu de drapeaux D3DFVF_XYZRHW.Dessin de vertex transformé le plus basique avec Direct3D
Maintenant, j'essaie d'obtenir la même sortie avec des sommets non transformés, mais je n'ai aucun visuel sur l'écran. J'ai changé ma FVF et ajusté les sommets mais je n'ai pas encore défini de matrice de transformation (monde, vue, projection). Est-il nécessaire de définir l'une de ces matrices? Je supposerais que tout fonctionnerait comme avec des sommets transformés quand aucune matrice n'est définie, mais évidemment ce n'est pas le cas.
Quelle zone (en coordonnées mondiales) est visible par défaut? Que dois-je faire pour le faire fonctionner?
Ceci est essentiellement ce que je fais:
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);
Merci à l'avance!
EDIT: Maintenant je l'ai eu, l'éclairage a été activé, l'erreur du débutant stupide. Merci pour votre aide de toute façon!
Bon point, j'ai désactivé le test z-buffer, mais le problème reste. –