» »

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

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...

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.

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.

hatch ::

Ne bom ugovarjal, nisem preprican... Po mojih testih sodec, so quadi hitrejsi...

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)...

Phil ::

Sej Quade uporabljam samo zato ker ne rabim tolk tock, da naredim kaksno stavbo...
Thx za odgovore.
LP


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

tekstura [c++ opengl]

Oddelek: Programiranje
9844 (629) matej94
»

[c++]OpenGL izris kvadrata

Oddelek: Programiranje
81209 (1069) Mavrik
»

C++ programirane v Open GL oz. Direct x

Oddelek: Programiranje
242877 (2148) Vesoljc
»

OpenGL problem

Oddelek: Programiranje
212360 (1926) Gundolf
»

ideja... :)

Oddelek: Programiranje
5963 (708) Senitel

Več podobnih tem