2013-04-07 21 views
5

Utilizzando il tutorial qui, sono riuscito a ottenere un triangolo rosso sul mio schermo: http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-4Disegnare un rettangolo in Direct X

CUSTOMVERTEX OurVertices[] = 
{ 
    { 0, 0, 0, 1.0f, D3DCOLOR_XRGB(127, 0, 0) }, 
    { WIDTH, 0, 0, 1.0f, D3DCOLOR_XRGB(127, 0, 0) }, 
    { 0, 300, 0, 1.0f, D3DCOLOR_XRGB(127, 0, 0) }, 
    { WIDTH, 300, 0, 1.0f, D3DCOLOR_XRGB(127, 0, 0) } 
}; 

d3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 
    0, 
    CUSTOMFVF, 
    D3DPOOL_MANAGED, 
    &vBuffer, 
    NULL); 

VOID* pVoid; // the void* we were talking about 

vBuffer->Lock(0, 0, (void**)&pVoid, 0); // locks v_buffer, the buffer we made earlier 
memcpy(pVoid, OurVertices, sizeof(OurVertices)); // copy vertices to the vertex buffer 
vBuffer->Unlock(); // unlock v_buffer 

d3dDevice->SetFVF(CUSTOMFVF); 
d3dDevice->SetStreamSource(0, vBuffer, 0, sizeof(CUSTOMVERTEX)); 
d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); 

ma si può vedere che ho molta voglia di essere disegnare un rettangolo.

ho cambiato la primitiva per pescare 2 triangoli e ampliato la dimensione del buffer di 4 * dimensioni del mio custom vertex ma non posso davvero dire ho capito come ottenerlo dal mio triangolo rettangolo al mio vorrei:

enter image description here

c'è un modo migliore di disegnare un rettangolo piuttosto che utilizzare un quad considerando che ho solo voglia di fionda un testo su di esso qualcosa di simile:

http://1.bp.blogspot.com/-6HjFVnrVM94/TgRq8oP4U-I/AAAAAAAAAKk/i8N0OZU999E/s1600/monkey_island_screen.jpg

+0

Correggetemi se ho torto, ma dovreste avere quattro vertici e un buffer di indice contenente gli indici appropriati per due triangoli per rendere il vostro rettangolo. – chris

+0

Quindi 4 vertici = i 4 punti di un quadrato e un indice è l'ordine con cui disegnarli? Ovviamente sono completamente fresco in questa idea di vertice, potrei avere un po 'di mano per superare questo ostacolo? O forse un esempio di un rettangolo specifico? – Jimmyt1988

+0

Quindi nel tuo buffer di vertici avresti, ad esempio, '{(-2, 2, 0), (2, 2, 0), (2, 1, 0), (-2, 1, 0)} '(in alto a sinistra, in alto a destra, in basso a destra, in basso a sinistra) e il tuo buffer di indice potrebbe contenere' {(0, 1, 3), (3, 1, 2)} '(TL, TR, BL, seguito da BL, TR, BR). Il buffer indice indica semplicemente quali vertici vengono in quale ordine. Si dovrebbe essere consapevoli del fatto che sia CW o CCW anche per il culling. Devi anche aggiungere "SetIndexBuffer" ecc. Perdonami, dato che è passato un po 'di tempo da quando l'ho fatto, e non mi sono mai piaciute tanto quanto le funzioni di mesh premade. – chris

risposta

8

ho dovuto exend il mio tampone per consentire 4 vertex dimensione della matrice:

d3dDevice->CreateVertexBuffer(4*sizeof(CUSTOMVERTEX), 
    0, 
    CUSTOMFVF, 
    D3DPOOL_MANAGED, 
    &vBuffer, 
    NULL); 

e poi cambiato il sorteggio primitiva da TRIANGLELIST a striscia estendere la quantità di triangoli disegnati a 2

d3dDevice->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); 

Fonte: http://www.mdxinfo.com/tutorials/tutorial4.php

Problemi correlati