Chcę, aby obiekty przemieszczały się między dwiema symulacjami fizyki przez „okno” i kolidowały z tymi z obu symulacji w przypadku przecięcia płaszczyzny okna.
Układy współrzędnych symulacji nie mają tego samego początku i mogą mieć inną orientację. Zawijanie symulacji do siebie nie jest konieczne, ale byłoby plusem.
Jak skutecznie połączyć systemy bez klonowania poszczególnych obiektów?
Edytować:
Obliczenia powinny być tak dokładne, jak to możliwe, aby obiekty nie utknęły, jeśli jednocześnie przechodzą przez okno z przeciwnych stron.
physics
collision-detection
Tamschi
źródło
źródło
Odpowiedzi:
Jest ten fajny projekt o nazwie Pseudoform, wcześniej znany jako „Portalized”, który obsługuje symulacje fizyki przy użyciu portali w sposób groovie:
Pseudoform
Sprawdź to!
Zwłaszcza filmy - jest niesamowicie fajne.
Jest to oprogramowanie typu open source, więc możesz zobaczyć, jak to robią.
Założę się, że tego właśnie chcesz. :)
źródło
Okej - nie wiem czy to zadziała.
Na podstawie powyższych informacji umieściłbym wyzwalacze w „oknach”, aby móc wykryć, kiedy obiekt wychodzi ze świata. Weź wektor prędkości prądu w chwili zderzenia. Oblicz pozostały czas na podstawie tego, gdzie uderzył w wyzwalacz i gdzie skończył się w tej ramce (poza światem twój świat potrzebuje wirtualnej granicy, aby to umożliwić). W tym momencie znasz prędkość i pozostały czas, więc możesz zmienić jej położenie na granicy świata, do którego ma zamiar wejść, i zmienić prędkość. Wymagałoby to jednak dwóch aktualizacji fizyki w jednej ramce, a jeden obiekt przechodzi od a do b, podczas gdy inny przechodzi od b do a w tej samej pozycji - w ogóle nie wykryłoby się kolizji.
Trochę szkicowy,
źródło
Przeczytałem kilka informacji na temat symulacji fizyki i znalazłem możliwe rozwiązanie. Działa poprzez podzielenie każdego kroku fizyki na trzy fazy:
1. Krok wstępny:
W każdym kroku fizyki okno tworzy cztery transformacje, po dwie dla każdej strony połączenia:
(Okna statyczne muszą to zrobić tylko raz).
Ponadto obiekty w każdym układzie współrzędnych są podzielone na trzy grupy:
Grupowanie fizyki http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
Obiekty przed oknem (zielone).
Obiekt zaliczany jest również do tej grupy, jeśli przecina płaszczyznę okna lub prawdopodobnie przekroczy ją zza okna (nie pokazano).
Obiekty przecinające okno lub które prawdopodobnie przecinają je w tym kroku fizyki (pomarańczowy).
Obiekty za oknem (niebieskie). Jeśli obiekt leci w kierunku tylnej części okna, nadal jest oznaczony jako członek grupy trzeciej.
Grupowanie można uprościć, jeśli okno znajduje się na granicy symulacji.
2. Główny krok:
Fizykę oblicza się głównie jak zwykle, z kilkoma wyjątkami:
Obiekty z drugiej grupy nigdy nie kolidują z obiektami z trzeciej grupy i odwrotnie.
Transformacja wejściowa okna jest wykorzystywana na obiektach z drugiej grupy, a wyniki są oceniane w stosunku do przednich i przecinających się obiektów z systemu docelowego. Powstała siła jest przekształcana za pomocą transformacji wyjściowej i przykładana do oryginalnego obiektu.
(Jeśli obiekt zostanie trafiony podczas obliczeń, należy go przegrupować!)
3. Po kroku:
Jeśli obiekt z drugiej grupy przekroczył okno, jest przenoszony do systemu docelowego za pomocą transformacji wejściowej.
Dodatkowe przemyślenia:
Jeśli transformacje zostaną zachowane po obliczeniu fizyki, można je wykorzystać do przyspieszenia renderowania i dla łatwiejszych obliczeń AI. Grupowania można użyć do usunięcia płaszczyzn klipu z procesu renderowania.
Minusem tego rozwiązania jest to, że okna należy dodawać bezpośrednio do silnika fizyki.
źródło