Wykrywanie kolizji



System wykrywania kolizji składa się między innymi z systemu wykrywania przecięć. Wybrane metody wykrywania przecięć zostały opisane poniżej.

1. Przecięcie sześcianu ze zbiorem małych wielokątów
W metodzie tej porównujemy współrzędne wierzchołków małych wielokątów z minimalną i maksymalną współrzędną sześcianu na kolejnych osiach. Kolizja wystąpi, jeżeli wszystkie poniższe warunki są spełnione.

x min. sześcianu < x współrzędna wierzchołka wielokąta < x max. sześcianu
y min. sześcianu < y współrzędna wierzchołka wielokąta < y max. sześcianu
z min. sześcianu < z współrzędna wierzchołka wielokąta < z max. sześcianu

2. Przecięcie sześcianu ze zbiorem dowolnych wielokątów (wyznaczone z mapy kolizji).
W metodzie tej dla każdego wielokąta sceny generujemy mapę kolizji składającą się z punktów znajdujących się na powierzchni wielokąta. Kolizje z wielokątami sceny sprawdzamy tak jak w metodzie pierwszej, ale porównujemy współrzędne punktów mapy kolizji ze współrzędnymi sześcianu.

3. Przecięcie odcinka ze ścianą
W metodzie tej rozwiązujemy równanie płaszczyzny ściany dla współrzędnych początkowych i końcowych odcinka, a następnie sprawdzamy znak wyniku. Jeżeli stwierdzimy, że znak wyniku otrzymany dla współrzędnych początkowych jest różny od znaku wyniku otrzymanego dla współrzędnych końcowych, to istnieje możliwość kolizji ze ścianą. Wyznaczamy wtedy punkt przecięcia płaszczyzny ściany z odcinkiem. Następnie sprawdzamy czy punkt przecięcia znajduje się wewnątrz ściany. Jeżeli punkt przecięcia znajduje się wewnątrz ściany to kolizja wystąpiła. Dokładny opis metody z odniesieniem do teorii znajduje się w artykule Podstawy grafiki 3D.

4. Przecięcie bryły wypukłej ze ścianą.
W metodzie tej sprawdzamy czy istnieje część wspólna bryły wypukłej i ściany. W pierwszym kroku tniemy ścianę wybraną płaszczyzną, na której znajduje się jeden z wielokątów bryły wypukłej i sprawdzamy czy istnieje fragment ściany za płaszczyzną cięcia. W krokach następnych otrzymany fragment ściany tniemy kolejnymi płaszczyznami. Jeżeli w trakcie cięcia nie otrzymamy fragmentu ściany znajdującego się za płaszczyzną cięcia to kolizja nie wystąpiła. Jeżeli przetestujemy wszystkie płaszczyzny i otrzymamy część wspólną bryły wypukłej i ściany, to kolizja wystąpiła.

5. Przecięcie sfery ze ścianą.
W metodzie tej liczymy odległość środka sfery od ściany. Jeżeli wyznaczona odległość jest mniejsza od promienia sfery to liczymy punkt przecięcia prostej (przechodzącej przez środek sfery i skierowanej zgodnie ze zwrotem wektora normalnego ściany) z płaszczyzną ściany. Następnie sprawdzamy czy wyznaczony punkt znajduje się wewnątrz ściany lub czy jego odległość od ściany jest mniejsza od promienia sfery. Jeżeli dowolny z warunków jest spełniony to kolizja wystąpiła.

6. Przecięcie elipsoidy ze ścianą.
W metodzie tej mnożymy współrzędne ściany przez odpowiednie współczynniki korygujące różnice w długościach promieni na osiach x, y, z, a następnie sprawdzamy przecięcie sfery ze ścianą.

Autor: Mirosław Kozioł, Komires Sp. z o.o.


Numer artykułu: 3
Wysłany: Sun, Jan 24, 2010 5:26 AM
Ostatnio zmieniony: Sun, Feb 14, 2010 3:20 PM

Adres URL: https://www.komires.net/article.php?id=3