-
dav #4806 Helló Ant!
Az ütközés-detektálás egyértelműen a leggázosabb része az egész fizikai szimulációnak. Szóval ha ismersz jó trükköket, ne titkold el, mert engem is érdekelnének :)
Én legutóbb egy V-clip nevű algoritmust néztem ki magamnak, amiről itt olvastam:
http://www.merl.com/projects/vclip/
Ez a módszer igazából nem is ütközések detektálására jó, hanem két (lehetőleg konvex és nem érintkező) test közötti legkisebb távolság mérésére, és ennek speciális eseteként foglalkozik az ütközéssel.
Én viszont arra gondoltam, hogy ezt a tulajdonságát remekül ki lehetne használni arra, hogy lekerekített sarkú/élű objektumok ütközését vizsgáljuk. Úgy képzelem a dolgot, hogy van két poligonok által határolt konvex test, és mindkettő vastag "paplanba" van csomagolva. Ezek a becsomagolt testek szimulálnák az eredeti objektumokat (tehát a belső test jóval kisebb, mint az eredeti objektum). Amikor az objektumok ütköznek, csak a "paplanok" érintkeznek, a két belső test sosem. Vagyis a V-clip algoritmust le lehet futtatni a két belső testre, és az megadja a közöttük mérhető legkisebb távolságot, ami biztos pozitív, mert ez a két test nem érintkezik. Ebből a távolságból le kell vonni a két "paplan" vastagságát (ez persze testenként különböző is lehet), és ha az eredmény negatív, akkor a két becsomagolt test ütközött, méghozzá a kapott mélységben lógnak egymásba.
A lekerekített sarkú testek szerintem nagyon hasznosak, mert számos esetben sokkal kevesebb poligonnal sokkal jobban körül lehet írni az igazi formát. Ez főleg a tereptárgyak esetében igaz. Például egy nagyjából gömbölyű sziklát egyetlen ponttal (és a megfelelő sugarú "paplannal") megfelelően körül lehet írni, él vagy poligon nem is kell hozzá. Egy fatörzset vagy lámpaoszlopot egyetlen becsomagolt éllel meg lehet adni, és ráadásul így valóban hengeresek lesznek, nem szögletesek, tehát még élethűbb is az eredmény. Gondot csak a konkáv testek okoznak (ezeket több konvex testből kell felépíteni), és az élek, mint például a járdaszegély (bár a Buggy-ban ilyen valószínűleg nem sok lesz :) ).
Üdv:
dav