2013-04-07 8 views
5

Mit dem Tutorial hier Zeichnung, ich habe ein rotes Dreieck auf meinem Bildschirm bekommen verwaltet: ein Rechteck zeichnen will, um wirklich http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-4ein Rechtecks ​​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); 

Aber man kann sehen, dass ich.

Ich habe die Primitive geändert, um 2 Dreiecke zu zeichnen und die Puffergröße auf 4 * Größe meiner benutzerdefinierten Ecke erweitert, aber ich kann nicht wirklich sagen, ich verstehe, wie man es von meinem Dreieck zu meinem Rechteck ich möchte:

enter image description here

gibt es einen besseren Weg, um ein Rechteck zu zeichnen, anstatt mit einem Quad bedenkt, dass ich will nur so etwas wie diese etwas Text auf ihn Schlinge:

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

+0

Korrigieren Sie mich, wenn ich falsch liege, aber Sie sollten vier Scheitelpunkte und einen Indexpuffer mit den richtigen Indizes für zwei Dreiecke haben, um Ihr Rechteck zu machen. – chris

+0

Also 4 Ecken = die 4 Punkte eines Quadrats und ein Index ist die Reihenfolge, in der sie gezeichnet werden? Ich bin dieser Vertex-Idee natürlich ganz frisch, könnte ich ein bisschen über diese Hürde hinwegkommen? Oder vielleicht ein Beispiel speziell für ein Rechteck? – Jimmyt1988

+0

Also in Ihrem Vertex-Puffer, hätten Sie zB '{(-2, 2, 0), (2, 2, 0), (2, 1, 0), (-2, 1, 0)} '(oben links, oben rechts, unten rechts, unten links) und Ihr Indexpuffer könnte' {(0, 1, 3), (3, 1, 2)} '(TL, TR, BL, gefolgt von BL, TR, BR). Der Indexbuffer sagt nur, welche Scheitelpunkte in welcher Reihenfolge kommen. Sie sollten sich darüber im Klaren sein, ob es CW oder CCW ist. Sie müssen dazu noch etwas 'SetIndexBuffer' usw. hinzufügen. Vergib mir, da es schon eine Weile her ist, dass ich das gemacht habe, und ich mochte diese nie so sehr wie die vorgefertigten Mesh-Funktionen. – chris

Antwort

8

Ich hatte meine Puffer exend für 4 Vertex-Array-Größe zu ermöglichen:

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

Und dann änderte sich die Zieh primitiv aus TRIANGLELIST die Menge der Dreiecke auf 2

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

Quelle gezogen Streifens erstrecken: http://www.mdxinfo.com/tutorials/tutorial4.php