[ Aragorn2004 @ 01.03.2005. 23:28 ] @
Pocetnik sam pa imam problema oko jednostavnih stvari.

Naime, zelim napraviti pixel koji se krece i iza sebe ostavlja trag. Trenutno radim tako da u vertex bufferu imam samo 1 tocku koju po potrebi crtam i translatiram onoliko puta koliko je dugacak trag. U pocetku sve radi OK, ali kada se trag nakon nekog vremena poveca, crtanje se znatno uspori.

Code:
for ( int i=0; i<duzinaTraga; ++i )
{
  d3d_Device->DrawPrimitive ( D3DPT_POINTLIST, 0, 1 );

  D3DXMATRIXA16 matWorld;
  D3DXMatrixTranslation( &matWorld, trag[i].x, trag[i].y, 0.0f );
  d3d_Device->SetTransform ( D3DTS_WORLD, &matWorld );
}


Problem je u funkciji DrawPrimitive koja se poziva sve vise i vise puta kako trag raste, a time se sve usporava. Zna li netko kako doskociti ovom glupastom problemu? :-)


P.S. Radim u DirectX 9. Pokusavam napravit neku 2D igru.
[ Reljam @ 02.03.2005. 17:15 ] @
Za Direct3D se racuna da ne bi trebao da radis vise od nekoliko stotina DrawPrimitive-a po frejmu. Probaj da sve tacke traga stavis u jedan vertex buffer i da tako iscrtas ceo trag iz samo jednog DP poziva.

Takodje, gledaj da ti VB sadrzi transformisane tacke, bolje ti je da ga jedanput lockujes (sa discard, naravno!) i updateujes, nego da stalno menjas world matrix.
[ miskec @ 18.03.2005. 15:34 ] @
Ma slusaj kako ces izbaci draw primitive iz for ciklusa. Ali ceo taj code moras da stavis u Begin -- End i tako ce ti 100x ici brze jel ti nemoras crtati svaki put tacku samo je ispomeras pre nego sto je prikazes na ekranu i ona se prikaze na svim mestima na koje si je pomerio. Imas samo jednu tacku. Da li me razumes?