Forum » Programiranje » 3d engine
3d engine
Phil ::
Delam en preprost 3d engine in me zanima če kdo ve kako
bi najlažje preprečil da se lahko sprehodiš skozi stene? Celotno sceno sestavljajo kvadrati
(GL_QUADS).
LP
bi najlažje preprečil da se lahko sprehodiš skozi stene? Celotno sceno sestavljajo kvadrati
(GL_QUADS).
LP
Senitel ::
Prvo kot prvo, ti priporočam, da GL_QUADS spremeniš v GL_TRIANGLES, še bolje pa da v GL_TRIANGLESTRIP ali GL_TRIANGLEFAN (ker vse grafične kartice dosti hitreje rišejo trikotnike, kot pa pravokotnike).
Zdej za trke imaš pa več rešitev:
1. Lahko uporabiš BSP drevesa
2. Octatrees so tudi cool
3. Vzameš en trikotnik in eno točko in narediš sledeče (dp3 -> dot product 3):
ang=dp3(T-A,T-B)+dp3(T-B,T-C)+dp3(T-C,T-A).
Kjer so A,B,C ogljišča trikotnika, T pa je tvoja točka. Ko je ang dovolj blizu 2pi (360 stopinj) veš, da je točka na trikotniku oziroma je trčila ob trikotnik...
Zdej za trke imaš pa več rešitev:
1. Lahko uporabiš BSP drevesa
2. Octatrees so tudi cool
3. Vzameš en trikotnik in eno točko in narediš sledeče (dp3 -> dot product 3):
ang=dp3(T-A,T-B)+dp3(T-B,T-C)+dp3(T-C,T-A).
Kjer so A,B,C ogljišča trikotnika, T pa je tvoja točka. Ko je ang dovolj blizu 2pi (360 stopinj) veš, da je točka na trikotniku oziroma je trčila ob trikotnik...
hatch ::
Senitel.. to pa ni res.. vsaj v vecini primerov ne...
Tja nekje do 5.000 trikotnikov/frame so hitrejsi quadi!
Zakaj?
Ker je bottleneck pri malo trikotnikih grlo med procesorjem in graficno...
QUAD graficna kartica zelo hitro razdeli na 2 trikotnika...
procesor pa rabi samo 4 vertexe poslati graficni kartici, namesto 2h trikotnikov.. za katere bi rabil 6 vertexov.
Seveda pa je odvisno za kaj rabis.. za kak terrain uporabis trikotnike... za stene, tla.. itd.. uporabis quade.
Tja nekje do 5.000 trikotnikov/frame so hitrejsi quadi!
Zakaj?
Ker je bottleneck pri malo trikotnikih grlo med procesorjem in graficno...
QUAD graficna kartica zelo hitro razdeli na 2 trikotnika...
procesor pa rabi samo 4 vertexe poslati graficni kartici, namesto 2h trikotnikov.. za katere bi rabil 6 vertexov.
Seveda pa je odvisno za kaj rabis.. za kak terrain uporabis trikotnike... za stene, tla.. itd.. uporabis quade.
Senitel ::
Nope quadi niso hitrejši zato, ker jih ne razbija na trikotnike grafični čip, ampak procesor. V bistvu quade razbije driver ročno na trikotnike.
Najhitrejša primitiva sta triangle strip in triangle fan.
Najhitrejša primitiva sta triangle strip in triangle fan.
Senitel ::
Na kakšni konfiguraciji (grafična, pa točno kako to rišeš)?
Možno, da je hitrejši zato, ker v primeru, da rišeš trikotnike mora vse vertex še enkrat, pri quadih pa postavi samo indexe (a ma OpenGL sploh indexe?). Če pa daš recimo tole:
glBegin(GL_TRIANGLESTIP);
glVertex3d...
glVertex3d...
glVertex3d...
glVertex3d...
glEnd();
Je najhitrejši način, kako narisat pravokotnik (razen če daš zraven še display liste, vertex arraye ali pa vse skupaj daš direkt v video pomnilnik)...
Možno, da je hitrejši zato, ker v primeru, da rišeš trikotnike mora vse vertex še enkrat, pri quadih pa postavi samo indexe (a ma OpenGL sploh indexe?). Če pa daš recimo tole:
glBegin(GL_TRIANGLESTIP);
glVertex3d...
glVertex3d...
glVertex3d...
glVertex3d...
glEnd();
Je najhitrejši način, kako narisat pravokotnik (razen če daš zraven še display liste, vertex arraye ali pa vse skupaj daš direkt v video pomnilnik)...
Phil ::
Sej Quade uporabljam samo zato ker ne rabim tolk tock, da naredim kaksno stavbo...
Thx za odgovore.
LP
Thx za odgovore.
LP
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | tekstura [c++ opengl]Oddelek: Programiranje | 911 (696) | matej94 |
» | [c++]OpenGL izris kvadrataOddelek: Programiranje | 1272 (1132) | Mavrik |
» | C++ programirane v Open GL oz. Direct xOddelek: Programiranje | 2979 (2250) | Vesoljc |
» | OpenGL problemOddelek: Programiranje | 2485 (2051) | Gundolf |
» | ideja... :)Oddelek: Programiranje | 1013 (758) | Senitel |