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ę!