Autor Wątek: DX9 Index Buffer  (Przeczytany 1033 razy)

Offline MofC

  • Użytkownik

# Maj 29, 2012, 14:24:15
Więc tak, mam bufor wierzchołków w którym mam zadeklarowane 8 wierzchołków

CUSTOMVERTEX swiat[]=
{

{ 0.0f, 0.0f, 0.0f, 0xff00ff00, }, //0
{ 0.0f, 0.0f, 5.5f, 0xff00ff00, }, //1
{ 5.0f, 0.0f, 0.0f, 0xff00ff00, }, //2
{ 5.0f, 0.0f, 5.0f, 0xff00ff00, }, //3


{ 1.0f, 0.0f, 1.0f, 0xff0000ff, }, //4
{ 1.0f, 0.4f, 1.0f, 0xff0000ff, }, //5
{ 1.0f, 0.0f, 0.5f, 0xff0000ff, }, //6
{ 1.0f, 0.4f, 0.5f, 0xff0000ff, }  //7


};

Następnie tworze dwa bufory indeksów w których deklaruje dwa kwadraty (pionowy i poziomy)

WORD kwadrat1[]={0,1,2, 3,2,1};
WORD kwadrat2[]={4,5,6, 5,7,6};

I renderuje scene

renderer->Clear( 0, NULL,  D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,50), 1.0f, 0 );
renderer->BeginScene();
renderer->SetStreamSource(0,buforw,0,sizeof(CUSTOMVERTEX));
renderer->SetFVF( D3DFVF_CUSTOMVERTEX );
renderer->SetIndices(kwadrat1);
renderer->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,2);


renderer->SetIndices(kwadrat2);
renderer->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,4,4,0,2);



renderer->EndScene();
renderer->Present( NULL, NULL, NULL, NULL );

i problem w tym że widać tylko ten pionowy, a gdy skasuje rysowanie go to tamten(poziomy) widać z powrotem.
I chciałbym jeszcze zapytać czy takie podejście z jednym Vertex Buffer(dla całej sceny) i Index Buffer'ami dla każdego obiektu jest dobrym rozwiązaniem?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Maj 29, 2012, 14:57:43
Poczytaj o tym do czego służy trzeci parametr funkcji DrawIndexedPrimitive, bo wygląda na to, że potraktowałeś go sobie ulgowo. :)


EDIT: OK, sam doczytałem i wygląda OK. :)
« Ostatnia zmiana: Maj 29, 2012, 14:59:30 wysłana przez Krzysiek K. »

Offline radsun

  • Użytkownik
    • CaRpg

# Maj 29, 2012, 19:55:33
Według mnie w złej kolejności są te wierzchołki podane, wyłącz backface culling i zobacz czy wtedy je widać.

Offline raver

  • Użytkownik
    • Moja strona domowa.

# Maj 30, 2012, 00:03:14
Ja bym jeszcze sprawdził co się stanie gdy wrzucimy te indeksy do jednego bufora i narysujemy to wszystko jednym DrawIndexedPrimitive.

Offline MofC

  • Użytkownik

# Maj 30, 2012, 11:17:50
Backface culling jest już wyłączony a po wrzuceniu do jednego bufora indeksów wszystko działa tak jak powinno.

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Maj 30, 2012, 11:59:01
Pokasz resztę kodu (czyli ten fragment, gdzie tworzysz bufory).

Offline mihu

  • Użytkownik
    • mihu

# Maj 30, 2012, 12:38:54
Pokasz resztę kodu (czyli ten fragment, gdzie tworzysz bufory).
Kszysiek!

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Maj 30, 2012, 12:51:08
Kszysiek!
Hehe, literówka. :) Już wszystko w posządku. ;)

Offline MofC

  • Użytkownik

# Maj 30, 2012, 12:53:29
renderer->CreateVertexBuffer(sizeof(swiat),0,D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &buforw,NULL);
renderer->CreateIndexBuffer(sizeof(kwadrat1),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&bufori1,NULL);
renderer->CreateIndexBuffer(sizeof(kwadrat2),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&bufori2,NULL);

VOID* pVertices;

buforw->Lock(0,sizeof(swiat),(void**)&pVertices,NULL);
memcpy(pVertices,swiat,sizeof(swiat));
buforw->Unlock();

bufori1->Lock(0,sizeof(kwadrat1),(void**)&pVertices,NULL);
memcpy(pVertices,kwadrat1,sizeof(kwadrat1));
bufori1->Unlock();

bufori2->Lock(0,sizeof(kwadrat2),(void**)pVertices,NULL);
memcpy(pVertices,kwadrat2,sizeof(kwadrat2));
bufori2->Unlock();
« Ostatnia zmiana: Maj 30, 2012, 12:56:11 wysłana przez MofC »