2013-04-07 19 views
5

Korzystanie z samouczka tutaj, udało mi się dostać czerwony trójkąt na moim ekranie: http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-4Rysowanie prostokąta z 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); 

Ale widać, że naprawdę chcę być rysowanie prostokąta.

Zmieniłem prymityw, aby narysować 2 trójkąty i rozszerzyłem rozmiar bufora do 4 * rozmiaru mojego niestandardowego wierzchołka, ale naprawdę nie mogę powiedzieć, że rozumiem jak dostać to z mojego trójkąta do mojego prostokąta Chciałbym:

enter image description here

Czy istnieje lepszy sposób rysowania prostokąta zamiast używać quad rozważa chcę po prostu podwiesić jakiś tekst na wierzchu coś takiego:

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

+0

Popraw mnie, jeśli się mylę, ale powinieneś mieć cztery wierzchołki i bufor indeksu zawierający właściwe wskaźniki dla dwóch trójkątów, aby utworzyć prostokąt. – chris

+0

Więc 4 wierzchołki = 4 punkty kwadratu i indeksy to kolejność ich losowania? Oczywiście jestem całkowicie świeża w tej idei werteksów, czy mógłbym trochę poradzić sobie z tą przeszkodą? A może przykład konkretnego prostokąta? – Jimmyt1988

+0

Tak więc w twoim buforze wierzchołków miałbyś na przykład '{(-2, 2, 0), (2, 2, 0), (2, 1, 0), (-2, 1, 0)} '(u góry po lewej, u góry po prawej, u dołu po prawej, u dołu po lewej) i twój bufor indeksu może zawierać' {(0, 1, 3), (3, 1, 2)} '(TL, TR, BL, a następnie BL, TR, BR). Bufor indeksu po prostu informuje, które wierzchołki przychodzą w jakiej kolejności. Powinieneś być świadomy tego, czy to CW czy CCW, jak również dla uboju. Musisz również dodać "SetIndexBuffer" itd. Wybaczcie mi, ponieważ minęło trochę czasu, odkąd to zrobiłem, i nigdy nie lubiłem tych tak bardzo, jak gotowych funkcji siatki. – chris

Odpowiedz

8

miałem exend mi bufor umożliwić 4 wierzchołka rozmiar tablicy:

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

czym zmieniła pobór prymitywny z TRIANGLELIST do paska wystająca wysokość trójkąta uwagę na 2

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

Źródło: http://www.mdxinfo.com/tutorials/tutorial4.php

Powiązane problemy