Делаю демо с автомобилем и корректной физикой

Вначале я оптимистично предполагал, что сделаю демо за пару-тройку недель, в итоге растянулось на три месяца разработки по вечерам и до завершения ещё очень далеко.

1212
11
11

Круто, но было бы намного интереснее почитать про саму физику, все-таки это не хрен собачий, самому написать физ. движок. Интересно как делал решатель ограничений и т.д.

Автор

Про физику я частично написал тут: https://habr.com/ru/articles/818933/

Подход экспериментальный, но вроде рабочий. Если в двух словах - кватернионы это частный случай геометрической алгебры, и можно их обобщить до алгебры, которая кроме вращений ещё и описывает линейные перемещения. Тогда, например, одна сущность может описывать сразу перемещение и поворот, одна сущность описывает комбинацию силы и вращательного момента, одна сущность для скорости (опять же комбинация линейной и вращательной).

Формулы выглядят красиво, но по сложности ближе к тем, которые можно увидеть при использовании кватернионов.

Для ограничений тоже не очень станадртный для игр подход - на основе сил (и сил трения, чтобы гасить колебания). Из-за этого приходится брать большие силы и маленький шаг по времени. Использую метод Рунге-Кутты четвёртого порядка.

Я знаю, что в методах типа интегрирования Верле можно разрешать ограничения на расстояния и оно работает для отдельных точек, но я не смог придумать как это корректно применить в случае вращающихся тел с какими-то тензорами инерции. Потому что вращающееся тело может вести себя как волчок и реагировать на внешние силы довольно замысловатым образом.
В какой-то момент я понял, что упёрся в эту проблему и начал прокрастинировать, тогда поменял подход попробовал ограничения на основе сил.

Возможно, какие-то полу-явные или неявные солверы смогут работать лучше, но я в них не очень хорошо разбираюсь. Всё-таки хочется сделать работающий симулятор, а не закапываться в методы решения дифференциальных уравнений. Рунге-Кутты четвёртого порядка вроде хватает. Возможно, в будущем попробую что-нибудь ещё.

Обычно в игровых физических движках концентрируются на том чтобы результат "выглядел правдоподобно" - предметы не проходили сквозь другие и т.п., а о сохранении законов сохранения энергии и импульса не особо переживают. Но я пошёл другим путём, хочу максимально "честно" сделать.