Autor Wątek: Kolizja 3D - rozpoznanie kierunku  (Przeczytany 937 razy)

Offline WitekPL

  • Użytkownik

# Maj 10, 2011, 11:08:56
Witam.

Mam problem z rozpoznawaniem kolizji w swiecie 3D, w XNA. A bardziej w tym, ze nie wiem z jakiego kierunku ta kolizja pochodzi.

Chcialem zrobic prosta sciane przez ktora nie mozna przejsc, lecz mozna przesuwac sie wzdluz niej. jezeli zrobie BoundingBoxa, to bede wiedzial tylko czy obiekty nachodza na siebie, a jak zrobic aby wiedziec z ktorej strony, zeby moc zablokowac chodzenie wzdluz tej osi?


Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kuba D.

  • Użytkownik

# Maj 10, 2011, 11:42:38
Najprosciej - bierzesz pozycje tego boxa z obecnej klatki, odejmujesz od niego pozycje z poprzedniej klatki, normalizujesz i masz kierunek ruchu. I teraz jesli sie zdarzy ze box koliduje z czyms to kierunek z ktorego pochodzi kolizja wyznacza zanegowany kierunek ruchu.

A tak na marginesie to zainteresuj sie jakims gotowym, darmowym silnikiem do fizyki, odpada sporo zabawy z fizyka bo wszystko sie liczy samo, sa odpowiednie reakcje na kolizje, wywolywane callbacki, tylko poustawiac odpowiednie parametry dla roznych obiektow i viola.

Offline WitekPL

  • Użytkownik

# Maj 10, 2011, 12:00:35
I teraz jesli sie zdarzy ze box koliduje z czyms to kierunek z ktorego pochodzi kolizja wyznacza zanegowany kierunek ruchu.

no tak... ale w takim wypadku zablokuja sie wszystkie kierunki ruchu, a nie tylko ten prostopadly do kolizji. chyba ze zle rozumiem "kierunek z ktorego pochodzi kolizja"... mam sprawdzac po ktorej osi trafie na kolizje?

Offline Kuba D.

  • Użytkownik

# Maj 10, 2011, 12:13:40
Nie, nie zablkouja Ci sie wszystkie kierunki ruchu. Jesli kierunek ruchu byl v3(0.0, -1.0, 0.0) ( czyli ruch byl po osi Y w dol) to po zanegowaniu bedziesz mial v3(0.0, 1.0, 0.0). Czyli otrzymasz przeciwny kierunek ( w gore po osi Y).

Jesli wprowadzisz np. predkosc dla obiektu ( czyli wektor ruchu bedzie mnozony przez jakas wartosc - predkosc) to w momencie kolizji wystarczy przypisac do niej zanegowana predkosc w momencie zderzenia pomnozona przez jakas stala ktora wytlumi ruch ( odbicie sie od przeszkody spowoduje wyhamowanie obiektu - jak duze to zalezy od tej stalej; jesli bedzie odpowiednio dopasowana to natkniecie sie na przeszkode calkiem wyhamuje obiekt).

Oczywiscie to jest najprostsze podejscie bo przydaloby sie przy kolizji uwzgledniac normalna plaszczyzny w ktora obiekt uderza ( wtedy bedziesz mial ladnie odbicie o prawidlowy kat - jak krazek do hokeja uderzajacy o bande odbija sie nie w kierunku swojego ruchu ale o taki sam kat przy jakim uderzyl w bande tylko ze po przeciwnej stronie normalnej do uderzonej plaszczyzny).