Wdrożyłem prosty silnik fizyki gier 3D. Mam już przyzwoite wykrywanie kolizji, teraz próbuję wymyślić część odpowiedzi na kolizję. Używam metody opartej na impulsach do obliczania prędkości po zderzeniu. Działa to całkiem dobrze, jednak nie całkowicie uniemożliwia ciałom wzajemne przenikanie się. Mam więc dodatkowy fragment kodu, aby rozwiązać problem penetracji. Obecnie po prostu przesuwam ciała wzdłuż kontaktu normalnego o połowę głębokości penetracji - pierwsze ciało w kierunku normalnego kontaktu, drugie ciało w przeciwnym kierunku.
Jest to w porządku przez większość czasu, ale są pewne niepożądane efekty. Na przykład wyobraź sobie wąski korytarz i poruszający się przez niego obiekt. Jeśli obiekt uderza w jedną ze ścian korytarza, rozdzielczość penetracji przenosi go do przeciwległej ściany, a następnie w następnej ramce z powrotem do pierwszej ściany i tak dalej. Efekt jest taki, że obiekt bardzo szybko wibruje między ścianami, co nie jest ładne.
Moje pytanie brzmi więc, czy istnieje lepszy sposób na rozwiązanie problemu penetracji? Być może nie poruszaj ciałami, po prostu dostosuj ich prędkości (oprócz obliczeń impulsowych), aby przestały się zbliżać, a penetracja ustąpi w następnych kilku klatkach. Po prostu zgaduję tutaj. Jakieś pomysły?