Najlepszy / skuteczny sposób na zaimplementowanie kolizji 3D

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: wiele ograniczających sfer

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *