Есть три вектора (3D) -
acceleration
velocity
position
Обновляю позицию так -
position += (velocity * time);
velocity += (accerelation * time);
При столкновении получаю -
вектор нормали столкновения
И глубину столкновения я так понял можно посчитать из предыдущих координат объекта до столкновения, и настоящих при столкновении.
Теперь вопрос - как вытолкать объект обратно и при этом уменьшить его velocity исходя из всех этих данных?
Сейчас я попробовал просто отразить вектор velocity относительно вектора нормали столкновения - получил эффект прыгающего мячика туда и обратно (первый объект у меня просто плоскость и второй объект кубик который я заспавнил на высоте и вот он падает (падает из-за того что я устанавливаю acceleration.Z на -9.8), вектор velocity отражается он опять взлетает на высоту, потом опять падает и так до бесконечности). А мне надо чтобы этот кубик упал, вытолкнул себя из плоскости (вытолкнул на столько, на сколько успел пересечь плоскость) и лежал на поверхности дальше (пока наклон поверхности не учитываю).
Знаю, форум не по геймдеву, но может кто-то расскажет подробно что и как делать.