Как я могу реально смоделировать удар по мячу с помощью физики Bullet? (Живое демо включено)

Фон

Я играю в создание игры в мини-гольф с использованием three.js и преобразования ammo.js из библиотеки Bullet Physics, но у меня возникают некоторые проблемы с реалистичным движением мяча.

(Я разместил демо на http://penguinspuzzle.appspot.com/minigolf.html если вы хотите посмотреть, как это работает на практике.)

Вопрос

Какой хороший алгоритм дает более реалистичное движение мяча для мини-гольфа?

Что я пробовал

В ammo.js есть опции для трения, линейного демпфирования и демпфирования вращения.

Когда шарик катится, настройка трения, кажется, не имеет большого эффекта.

Я сейчас пользуюсь

body.setRestitution(0.8);
body.setFriction(1);
body.setDamping(0.2,0.1); // linear damping, rotational damping

Проблемы

При высоких значениях линейного демпфирования шар, кажется, замедляется слишком быстро.

С более низкими значениями, кажется, требуются годы, чтобы наконец остановиться.

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

Анализ

Я думаю, что проблема может быть в линейном затухании в ammo.js, которое вызывает экспоненциальное замедление.

Я старался:

  1. Запись видео удара гольфа
  2. Измерение местоположения мяча в каждом кадре
  3. Построение местоположения и скорости мяча в зависимости от времени

Результаты показаны ниже. Мне кажется, профиль скорости гораздо ближе к линейному, чем к экспоненциальному.

Любые предложения для алгоритма, чтобы получить ammo.js быть более реалистичным?

Гольф анализ

1 ответ

Решение

Я заметил, что вы используете "обычное" трение на сферическом объекте. В физике существует отдельное понятие "трение качения" для круглых объектов. Я не знаю, предоставляет ли Bullet Physics такую ​​концепцию в своем API. Если это так, попробуйте заменить это на аналог трения качения:

body.setFriction(1);
Другие вопросы по тегам