Я делаю игру, похожую на бильярд. Эта игра требует правильных (или очень точных) отражательных отскоков. Я пробовал Box2D и Bullet Physics , но у них обоих есть эта проблема.
Если на этом изображении есть стена, красная линия предполагает ход реального мяча в бильярдной игре. Но двигатели часто показывают курс зеленой линии. Особенно,
- Это происходит после того, как медленно движущийся шар падает на стену.
- Иногда быстро движущийся шар внезапно замедляется.
Я нахожу физический движок, который может максимально точно смоделировать игру в пул без этих проблем. Могу ли я получить некоторые рекомендации? Сейчас я копаю Newton Game Dynamics , но я не уверен, что движок покажет, что я хочу. Я рассматриваю движок PhysX как следующую пробу, и должен сделать свой собственный, если ничего не работает. Но очевидно, что это займет очень много времени, поэтому я бы не хотел этого делать. Я буду очень признателен, если вы сэкономите мое время. И, конечно, приветствуется решение с Box2D / Bullet Physics.
Я работаю с C / C ++ / Objective + C на iOS.
Я прилагаю свою конфигурацию с Box2D.
стены
- статическая форма коробки
- линейное / угловое демпфирование = 0,1
- реституция = 1,0
- трение = 100
- плотность = 10
- пуля = ложь
- фиксированное вращение = ложь
- инерционная шкала = 1,0
Яйца
- динамическая форма сферы
- линейное / угловое демпфирование = 0,1
- реституция = 1,0
- трение = 100
- плотность = 20
- пуля = правда
- фиксированное вращение = ложь
- инерционная шкала = 1,0
Ответы:
Несколько решений.
Для Box2D установите
b2_velocityThreshold
вb2Settings.h
файле. В моем случае я установил его на0.0f
и это сработало! Масса, трение, демпфирование НЕ были проблемой. Проверьте эту ветку обсуждения для более подробной информации. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782Используя другой физический движок. Newton Game Dynamics настроил выполнение этого по умолчанию правильно. Однако использование динамики Ньютона в iOS возможно, но это несколько сложнее, чем другие. Я использовал несколько дней, настраивая его для iOS.
Я также спрашиваю на форумах BulletPhysics. Я обновлю это, когда получу решение.
-- (редактировать) --
В Bullet есть некоторые пороговые атрибуты, но я не могу найти точно такую же вещь
b2_velocityThreshold
.Это выглядит похоже, но не сработало.
источник
Box2D будет делать то, что вы хотите, но вы должны установить константы восстановления (отказов) для настенных и шаровых светильников. Для игры в пул вы, вероятно, захотите начать с идеального восстановления и высокого трения, но с линейным и угловым демпфированием, и отрегулировать оттуда.
источник
Физические двигатели имеют порог отказов. Я не знаю, как это сделать в любом из этих двигателей, но слишком высокий порог заставит его игнорировать удары с определенной скоростью. Понизьте порог отказов, и он будет подпрыгивать на более низких скоростях.
Я знаю, что вы просили другой физический движок, но все известные мне физические движки используют пороги отказов, чтобы объекты не дрожали, когда они сидят друг на друге. Поэтому предлагать хороший физический движок будет контрпродуктивно, так как любой хороший физический движок будет иметь такой эффект.
источник
У меня была эта проблема, и для меня решением было обеспечить идеальную реституцию.
Так что для меня это sqrt 0,5 для всех объектов. Потому что sqrt (r1 * r1 + r2 * r2) == 1 в идеальной ситуации.
источник