Autor Wątek: Jak reagować odpowiednio na kolizję na 2 piętrach w modelu ?  (Przeczytany 673 razy)

Offline Niko

  • Użytkownik

# Luty 15, 2010, 13:18:35
Witam! Mam małe pytanie, otóż napisałem kolizję kamery z modelem przez równanie płaszczyzny i wszystko działa bardzo dobrze, jednak zauważyłem, że w niektórych przypadkach pozycja Y źle się wylicza, zauważyłem, że występuje to w takiej sytuacji:


----H---  (1 piętro)
|
|
|
-------- (parter)

H-Gdzie ja się znajduje


I tak, jak idę do przodu, to kamera zamiast poruszyć się normalnie poziomo, to spada na parter, zauważyłem, że dzieje się tak, ponieważ jak wyliczam w którym trójkącie moja postać się znajduje, to ignoruję wartość Y, a trójkąty ,,zaczynają się sprawdzać" od parteru, więc jak znajdzie już taki trójkąt na parterze, w którym ja się znajduję, to nie sprawdza nic dalej, tylko mnie od razu spycha :/ Wiecie może, jak można tego uniknąć ?


Pozdrawiam.

Offline Mr. Spam

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

Offline Kuba D.

  • Użytkownik

# Luty 15, 2010, 14:04:39
Możesz sprawdzać wszystkie trójkąty ( bez sensu).
Możesz zacząć sprawdzanie od najbliższych trójkątów ( również bez sensu).
Możesz podzielić model na kilka bspheres czy bboxów, sprawdzasz najpierw kolizje z nimi i jeśli jest kolizja to sprawdzasz tylko trójkąty w ich obrębie ( w miarę sensowne).
I wiele wiele innych.
Możesz zastosować gotowy silnik fizyczny i skupić się na ważniejszych rzeczach ( najlepsze wyjście ).

Offline Niko

  • Użytkownik

# Luty 15, 2010, 15:11:53
Może napiszę twoje propozycje w punktach:

1) Możesz sprawdzać wszystkie trójkąty.
2) Możesz zacząć sprawdzanie od najbliższych trójkątów.
3) Możesz podzielić model na kilka bspheres czy bboxów, sprawdzasz najpierw kolizje z nimi i jeśli jest kolizja to sprawdzasz tylko trójkąty w ich obrębie.
4) Możesz zastosować gotowy silnik fizyczny i skupić się na ważniejszych rzeczach.

Zacznę od końca

4) Gotowego silnika raczej nie użyję, ponieważ chcę napisać wszystko samemu - daje mi to większą satysfakcję :P

3) Z tym mógłby być problem, ponieważ z tego co zauważyłem, to w modelu te trójkąty nie są poustawiane w ten sam sposób koło siebie, tylko różne są w różnych miejscach, więc byłoby ciężko to wszystko porozdzielać do odpowiednich grup  :/

2) To samo co w 3pkt. trójkąty nie są poustawiane koło siebie, więc ciężko byłoby to sprawdzać.

1) To jedyne mogłoby zadziałać, mógłbym sprawdzać wszystkie możliwości i wybierać tą, której różnica obecnej wartości Y i wartości Y po zmianie jest najmniejsza, jednak to nie działało by chyba za szybko dla wielu modeli :/


Są może jeszcze jakieś pomysły ?

Pozdrawiam.

Offline Kuba D.

  • Użytkownik

# Luty 15, 2010, 15:22:40
Ok, skoro to dla celów szkoleniowych to nei ma potrzeby używania gotowego silnika.

Co do punktu 3 to jest to jest raczej najlepsze rozwiązanie i niezależne od tego jak są trójkąty poustawiane itp. Te kształty ( bshperes i bboxy) mogą na siebie zachodzić itp. A wygenerowanie ich jest całkiem proste ( niezależnie czy w programie do 3D czy automatycznie jakimś algorytmem podczas wczytywania modelu), po prostu przypisujesz do modelu kilka takich kształtów najlepiej dopasowanych do geometrii i dodajesz do nich indeksy trójkątów jakie zawierają bądź przecinają.
Jeszcze co do tego pierwszego sposobu. Do kolizji możesz( a raczej powinieneś) stosować siatkę o znacznie mniejszej ilości trójkątów ( tylko z grubsza opisujący kształt tej właściwiej siatki), bardzo szczegółowy mesh nic nie da i tylko zwolni sprawdzanie kolizji.