Próbuję stworzyć prostą grę 3D i muszę ograniczyć gracza w granicach świata gry. Kiedy gracz uderza w boki świata, chcę, żeby statek gracza lekko się odbił.
W efekcie próbuję uwięzić gracza w polu i powstrzymać go przed ucieczką przez boki ...
Zdołałem zdefiniować granice świata gry jako zbiór samolotów, z normami i odległościami od pochodzenia. Gracz ma kulistą sferę ograniczającą i dzięki śledzeniu tej witryny http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php udało mi się wykryć kolizje.
Nie mogę teraz dokładnie ustalić, co zrobić, gdy zostanie wykryta kolizja. Najlepsze, co potrafię, to utknąć w samolocie, przejść prosto przez niego lub kilkakrotnie odbić się od niego w naprawdę szybkim tempie.
Zdrowy rozsądek mówi mi, że muszę obliczyć kąt odbicia od płaszczyzny, używając jego normalnej wartości i zastosować ją do prędkości gracza, jednak myślę, że najpierw muszę sprawdzić, czy gracz przeszedł przez płaszczyznę, której nie mogę odrobić.
źródło
distance = speed * time
zwykle z bardzo małą odległością, aby uniknąć błędu), a następnie zaktualizować jego prędkość do wyniku kolizji.F = ma lub a = F / m. Oblicz punkt zderzenia między kulą a płaszczyzną. Zwykle jest to środek Kuli - normalny * promień. Jeśli chcesz uzyskać większą dokładność, oblicz, jak daleko kula przebiła płaszczyznę, i dostosuj swoje obliczenia. Jest to oczywiście w dużej mierze opcjonalne, chyba że chcesz naprawdę dokładnej fizyki. Teraz obliczyć prędkość względną wzdłuż normalnej. W przypadku płaszczyzny statycznej jest to: Vball Dot N. Następnie pomnóż VballDotN przez -1 i pomnóż przez masę. W fizyce na tym etapie pomnożymy to również przez współczynnik restytucji (współczynnik odrzuceń). Pomnóż ten skalar przez N, a będziesz miał swoją siłę.
Podczas dostosowywania Vball ponownie podziel siłę przez masę, a uzyskasz ostateczne przyspieszenie, więc po prostu dodaj to do prędkości i uzyskasz ostateczną prędkość po zderzeniu.
Ta metoda jest zgodna z formułami reakcji na zderzenie. Jeśli chcesz jeszcze większej dokładności, weź pod uwagę tarcie, które spowoduje obrót piłki, ale nie wiem, czy chcesz tego w swojej grze. W takim przypadku obliczasz siłę styczną:
Przed zastosowaniem jakichkolwiek efektów liniowych należy obliczyć Ft, w przeciwnym razie tarcie nie będzie dokładne.
źródło
vec3 F = -CollisionNormal * (1.0f+Ball.getRestitution())*vDotN;
:?Proponuję najpierw obliczyć odległość od samolotu; a następnie, gdy odległość <= do promienia prowadzi reakcję zderzenia.
Następnie możesz to zmienić, aby obliczyć odległość, a jeśli odległość jest mniejsza niż promień (co oznacza, że obiekt się nakłada), zmień położenie kul, a następnie przeprowadź reakcję na kolizję.
źródło