2012-07-20 6 views
1

J'ai un problème lorsque j'essaie d'utiliser D3DPT_TRIANGLELIST. L'exemple suivant provient d'un livre, donc je ne vois pas quel peut être le problème.Impossible de faire fonctionner D3DPT_TRIANGLELIST

VertexData:

ColorVertex *v; 

Triangle->Lock(0,0,(void**)&v,0); 

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0)); 
v[1] = ColorVertex(0.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,255,0)); 
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255)); 

Triangle->Unlock(); 

fonction Dessin:

Device->SetFVF(ColorVertex::FVF); 
Device->SetStreamSource(0,Triangle,0,sizeof(ColorVertex)); 

D3DXMatrixTranslation(&World,-1.25f,0.0f,0.0f); 
Device->SetTransform(D3DTS_WORLD,&World); 

Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); 
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); 

D3DXMatrixTranslation(&World,1.25f,0.0f,0.0f); 
Device->SetTransform(D3DTS_WORLD,&World); 

Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); 
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); 

Device->EndScene(); 
Device->Present(0,0,0,0); 

Cependant, si je change de D3DPT_TRIANGLELIST par exemple à D3DPT_LINELIST il trace une ligne. Si j'utilise D3DPT_POINTLIST, il ne dessine qu'un point (pixel) pour chacun des appels DrawPrimite.

Merci pour toute aide!

Répondre

0

Vos coordonnées de sommet ne forment pas un triangle, elles sont trois points dans une ligne.

+0

Merci pour votre réponse. Mais le ColorVertex est une structure, et puisque je passe toutes les valeurs à l'intérieur il devrait alors mettre x, y, z et la couleur pour 3 points différents. Ensemble, ils forment un triangle lorsque l'application trace une ligne entre eux? – Araw

+0

YES, désolé je n'ai pas répondu à cela très rapidement, mais on dirait que vous avez compris ce que je voulais dire – jcoder

0

Eh bien, après avoir travaillé autour j'ai trouvé l'erreur (!), Bonne pratique pour les débutants. Il était devant moi tout le temps, et il est dans les coordonnées:

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0)); 
v[1] = ColorVertex(0.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,255,0)); 
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255)); 

Cela ne peut pas former un triangle que les coordonnées Y nouveaux changements pour l'une des vertex. Bien sûr, il est possible de tracer des lignes et des points car ils n'ont pas besoin d'une coordonnée Y pour y former des spécifications. Donc, une solution est par exemple:

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0)); 
v[1] = ColorVertex(0.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(0,255,0)); 
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255)); 
Questions connexes