Detekcja kolizji obiektów poruszających się z użyciem brył
Transkrypt
Detekcja kolizji obiektów poruszających się z użyciem brył
Detekcja kolizji obiektów poruszających się z użyciem brył otaczających Przemysław Bągard Detekcja zderzeń ● ● Detekcja zderzeń to rozległy problem. W różnych miejscach zastosowań potrzebne będą różne aspekty tej detekcji jak np. ilość obiektów czy dokładność zderzeń. Można też wziąć pod uwagę nagłe zmiany badanego kształtu używanego do zderzenia (o czym miałem prezentację w zeszłym roku). Sama detekcja jest tylko narzędziem do rozwiązania kolejnych problemów w programie (tzn. samo rozwiązane problemu detekcji zderzeń wcale nie znaczy, że najtrudniejsze jest już za nami) Problem ● ● Oczekiwana sytuacja: – Duża liczba obiektów – Dokładny moment zderzenia – Niekoniecznie idealne odwzorowanie całego kształtu obiektu wykorzystywane przy zderzeniu (wystarczy przybliżenie modelu do kilku/kilkunastu kształtów) – Poruszanie się ruchem prostym Zastosowanie: – Gry – Symulacje Problem ● Zderzanie wszystkich trójkątów ze sobą byłoby bardzo kosztowne obliczeniowo, dlatego też obiekty stosowałyby poniższe kształty zamiast orginalnego. Model będzie w ten sposób przybliżony, ale zmniejszymy liczbę obiektów badanych do zderzenia. Te kształty to: – Kula (Otoczka punktu) – Otoczka odcinka – Otoczka trójkąta (otoczka oznacza, iż kształt zawiera punkty oddalone co najwyżej o jego promień 'r') Problem ● Czego szukamy – – – – Czy w ogóle może dojść do zderzenia na tym torze przesunięcia (tzn. patrzymy na wektor przesunięcia jak na linię) Dokładna odległość do najwcześniejszego momentu zderzenia Dokładna odległość do najpóźniejszego momentu zderzenia Punkty każdego z obiektów, które się ze sobą zderzają (można z nich otrzymać wektor normalny zderzenia) Zastosowania – – – – – Fizyka aplikacji – poruszanie postaci, spadanie, zjeżdżanie po równiach Kamera – nie chcemy by kamera była za ścianą, a postać przed ścianą Chwytanie obiektu (albo inna akcja na obiekcie) – postać nie powinna być w stanie np. wcisnąć przycisk znajdujący się za ścianą. Dopasowanie modelu – w momencie umieszczenia modelu, może się okazać iż znajduje się w stanie zderzenia. Można wtedy przesunąć model tak by nie był w stanie zderzenia. Nie tylko zapobieganie zderzeniom, można np. Wykonać akcję w momencie wejścia/wyjścia lub przebywania w kształcie (którym jest np. gaz) Obecne efekty ● ● Wykrywanie kolizji w praktyce działa (choć wciąż jest testowane) Program bez problemu działa z liczbą 1000 zderzeń odcinek-trójkąt (najczęstsza spodziewana sytuacja) bądź trzykrotnie mniej zderzeń otoczka trójkąta-otoczka trójkąta. – Nie znaczy to jednak, że tylko tyle kształtów może być jednocześnie na obszarze Ograniczenie liczby sprawdzeń ● Drzewo czwórkowe – ● Dzielimy obszar na mniejsze kawałki i wrzucamy obiekty do tych kawałków, w których się znajdują Funkcja filtrująca – – – Odrzuca sytuacje w których nie ma szans dojść do zderzenia Szybkie – kwestia kilkunastu sprawdzeń po której stronie płaszczyzny znajduje się punkt Odrzuca dużo przypadków – jeżeli żaden punkt kształtu nie znajduje się wewnątrz prostopadłościanu, to nie ma szans by doszło do zderzenia Wcześniejsze prace Collision Detection for Cylinder-Shaped Rigid Bodies (Michael S¨unkel) ● – Dodanie do istniejącego silnika fizycznego obsługi zderzenia cylindra i kapsuły (to co ja nazywam otoczką odcinka) z wcześniej istniejącymi typami obiektów. Zaprezentowano dyskretną detekcję zderzeń. Zastosowania w symulacjach. Collision Detection for Deformable Objects (M. Teschner, S. Kimmerle, B. Heidelberger, G. Zachmann, L. Raghupathi, A. Fuhrmann, M.-P. Cani, F. Faure, N. Magnenat-Thalmann, W. Strasser, P. Volino) ● – Detekcja zderzeń dla deformowalnych obiektów. Zastosowania w chirurgii i symulacjach ubrań Algorytmy detekcji kolizji obiektów geometrycznych (Kamil Hawdziejuk) ● – Algorytmy detekcji kolizji: GJ K, szybki test na prostopadłościanach, oraz struktury: BSP. Stara się, by mimo dużej ilości obiektów, program działał w miarę płynnie. Pokaz aplikacji... ... i dziękuję za uwagę!