22 sierpnia 2006

Witam, dzisiaj chciałbym napisać o fizyce 2d bryły sztywnej którą ostatnio implementowałem.

Pierwszym problemem jaki trzeba bylo rozwiacac to sprawdzanie kolizji OBB ( oriented bounding box ). W sieci znalazlem bardzo dobry artykuł na ten temat, a konkretniej wykrywanie kolizji za pomoca SAT (separate axis teorem). Algorytm ten gwarantuje nie tylko wykrycie kolizji ale rowniez sposob reakcji (minimalny wektor o jaki trzeba odsunac dwa obiekty zeby ze soboa nie kolidowaly).

Zastosowanie tego algorytmu w moim silniku przedstawia sie mniej wiecej tak: kazdy obiekt jest dziedziczony po klasie iActor ktora implementuje podstawowe wlasciwoscie fizyczne takie jak masa, bezwladnosc, predkosc katowa, predkosc liniowa itp. oraz udostepnia interfejs do aplikowania nowych sil dzialajacych na ten obiekt. Kazdy obiekt ktory jest poddawany sprawdzaniu kolizji zawiera obiekt klasy Collider, ktora opisuje ksztalt naszego obiektu (lista krawedzi). Kolizje sa sprawdzane przez podanie pary obiektow do klasy CollisionCheck. W rezultacie dostajemy informacje czy kolizja zachodzi jesli tak to mamy rowniez takie dane: normalna punktu kolizji, punkt kolizji, minimalne przesuniecie o jakie trzeba dwa obiekty od siebie odsunac.

Fizyczna reakcja na kolizje zajmuje sie klasa Physics ktora co staly okres czasu aktualizuje symulacje fizyczna. Materialy ktore mi poslozyly do opisanie relistycznego zachowania sie obiektów znalazlen na tej stronie. Autor jednak nie przewidzial sily tarcia ktora dziala podczas zderzenia i ten element wzoru wyprowadzilem sam. Konkretniej, rzutowalem wektor predkosci po kolizji na prosta prostopadla do normalnej kolizji i przemnozylem przez wspolczynnik tarcia, odejmujac otrzymany wektor od wektora predkosci po kolizji.

Prezentacje jak ta fizyka sie sprawuje w dzialaniu mozna zobaczyc na tym krotkim filmiku (na ktorym jednak nie ma jeszcze zaimplementowanego tarcia).

Komentarze: Prześlij komentarz

Subskrybuj Komentarze do posta [Atom]





<< Strona główna

This page is powered by Blogger. Isn't yours?

Subskrybuj Posty [Atom]