Już zaprogramowałem system kolizji 2D dla poprzedniej gry. To był mój pierwszy system kolizji i był brzydki. Szukałem kolizji między obiektami, sprawdzając wszystkie obiekty ze wszystkimi obiektami. Słyszałem już o systemie siatki z komórkami, w którym obiekt będzie wyglądał na kolizję tylko z innymi obiektami z bieżącej komórki (komórek). Czy to naprawdę dobry sposób na sprawdzenie kolizji?
Chciałbym mieć dobrą technikę przeglądania wszystkich moich elementów w świecie 3D.
Odpowiedź
Będziesz potrzebował dobrego algorytmu partycjonowania przestrzeni, powszechnie używanego w 3D to oktrees .
Następnie możesz otoczyć modele itp. sferami ograniczającymi, w których dokładnie pasują, ponieważ zderzenie między sferami ograniczającymi jest bardzo łatwe do obliczenia. Gdy już wiesz, że zderzają się dwie obwiedniowe sfery, możesz iteracyjnie zmniejszyć obwiednie i dodać je, aby zakryć obiekt, albo użyć innego inteligentnego algorytmu do obliczania kolizji między dwoma złożonymi obiektami.
Zobacz ten obraz:
Odpowiedź
Ostatecznie myślę, że odpowiedź Twoje pytanie będzie zależeć od potrzeb Twojej konkretnej aplikacji, ponieważ nie ma jednego uniwersalnego rozwiązania. Chociaż w sieci jest wiele przyzwoitych zasobów, zaoszczędzisz sobie dużo czasu i frustracja, przechwytując „s Christer Ericson” s Wykrywanie kolizji w czasie rzeczywistym , które szczegółowo przedstawia szeroką gamę technik i algorytmów, z przykładowym kodem C ++.
Pomogło mi to zrobić małe kroki, zanim wskoczyłem do próby zbudowania wielkiego systemu. Pisząc funkcję określającą, czy punkt znajduje się w płaszczyźnie, n jeśli punkt jest w trójkącie, jeśli promień jest w trójkącie, itp. Następnie przechodząc do testów statycznych różnych wypukłych brył: AABB kontra Trójkąt, itp. Z czasem rzeczy, które wydawały się nieprzeniknione (wybacz kalambur) na początku stały się mniej onieśmielające. Oto lista wielu testów wraz z przykładowym kodem:
http://www.realtimerendering.com/intersections.html
W międzyczasie, ponieważ wiem, że nie każdy może po prostu wydać 70-80 $ na książkę do woli, oto kilka terminów, którym warto się przyjrzeć:
- Przestrzenne partycjonowanie, ośmiokrotne, czterodrzewowe, drzewa BSP
- BIH Drzewa
- Objętości ograniczające i hierarchie woluminów ograniczających
- Dyskretne a ciągłe wykrywanie kolizji
- Twierdzenie o oddzielnych osiach
- Algorytm GJK