Najlepszy / skuteczny sposób na wdrożenie kolizji 3d

16

Zaprogramowałem już system kolizji oparty na 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ł tylko na kolizję z innymi obiektami z jego bieżących komórek. Czy to naprawdę dobry sposób na sprawdzenie kolizji?

Chciałbym mieć dobrą technikę przechodzenia przez wszystkie moje przedmioty w świecie 3D.

Jean-Philippe Leclerc
źródło

Odpowiedzi:

11

Będziesz potrzebował dobrego algorytmu partycjonowania przestrzeni, powszechnie używanego w 3D to oktety .

Następnie można otaczać modele itp. Sferami granicznymi, w których dobrze się pasują, ponieważ kolizję między sferami granicznymi można bardzo łatwo obliczyć. Gdy wiesz, że zderzają się dwie sfery graniczne, możesz iteracyjnie zmniejszyć sfery graniczne i dodać sfery graniczne, aby utrzymać w nich obiekt, lub skorzystać z innego inteligentnego algorytmu do obliczania kolizji między dwoma złożonymi obiektami.

Zobacz ten obraz: wiele sfer ograniczających

Roy T.
źródło
12

Ostatecznie myślę, że odpowiedź na twoje pytanie będzie zależeć od potrzeb konkretnej aplikacji, ponieważ nie ma jednego uniwersalnego rozwiązania. Chociaż w sieci znajduje się wiele przyzwoitych zasobów, zaoszczędzisz sobie dużo czasu i frustracji, wybierając wykrywanie kolizji w czasie rzeczywistym Christera Ericsona , które szczegółowo opisuje szeroką gamę technik i algorytmów, na przykład Kod C ++.

Pomogło mi to zrobić krok po kroku, zanim zacząłem budować wielki system. Pisanie funkcji w celu ustalenia, czy punkt znajduje się na płaszczyźnie, a następnie jeśli punkt jest w trójkącie, jeśli promień jest w trójkącie itp. Następnie przechodzimy do testów statycznych różnych wypukłych brył: AABB vs. Trójkąt itp. Z z czasem rzeczy, które wydawały się nieprzeniknione (wybaczcie kalambur) na początku stały się mniej zniechęcające. Oto lista dużej liczby testów wraz z przykładowym kodem:

http://www.realtimerendering.com/intersections.html

Tymczasem, ponieważ wiem, że nie każdy może dowolnie wydać 70-80 $ na książkę, oto kilka terminów, które możesz chcieć przyjrzeć:

  • Partycjonowanie przestrzenne, ósemki, czwórki, drzewa BSP
  • Drzewa BIH
  • Granice woluminów i hierarchie woluminów granicznych
  • Dyskretne a ciągłe wykrywanie kolizji
  • Twierdzenie o separacji osi
  • Algorytm GJK
użytkownik_123abc
źródło