Рекомендація фізичного двигуна, яка може правильно імітувати гру в більярд? [зачинено]


13

Я роблю гру в більярд, як гра. Ця гра вимагає правильних (або дуже точних) рефлексивних відмов. Я спробував Box2D і Bullet Physics , але в обох є ця проблема.

Ілюстрація

Якщо поверх цього зображення є стіна, очікується червона лінія справжнього кулі в грі в більярд. Але двигуни часто показують зелену лінію ходу. Особливо,

  1. Це відбувається після того, як повільно рухається кулька вдаряється об стіну.
  2. Іноді швидко рухається м'яч стає раптом повільніше.

Я знаходжу двигун фізики, який зможе максимально точно імітувати гру в більярд без цих проблем. Чи можу я отримати деякі рекомендації? Зараз я копаю 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

3
цілком ймовірно, що двигун не помилився, але ви не встановили властивість або робили це неправильно.
Качка комуніста


Я протестував з щільністю 1 і тертям 0,0 ~ 0,1, він продовжує прилипати.
Еоніл

Відповіді:


8

Кілька рішень.

  1. Для Box2D встановіть b2_velocityThresholdу b2Settings.hфайлі. У моєму випадку я встановив це 0.0fі воно спрацювало! Маса, тертя, демпфірування НЕ були проблемою. Перевірте цю дискусійну нитку для отримання більш детальної інформації http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. Використання іншого двигуна фізики. Newton Game Dynamics налаштовано виконувати це правильно за замовчуванням. Однак використання динаміки Ньютона в iOS можливо, але це дещо складніше, ніж в інших. Я декілька днів використовував його для iOS.

Я також прошу на форумах BulletPhysics. Я оновлю це, коли отримаю рішення.

- (редагувати) -

У Bullet є деякі порогові атрибути, проте я не зміг знайти абсолютно те саме b2_velocityThreshold.

Це схоже, але не спрацювало добре.

btRigidBody->setContactProcessingThreshold(0.0f)

6

Box2D зробить все, що ви хочете, але вам доведеться встановити константи відновлення (відскоку) для настінних і кульових світильників. Для гри в більярд ви, мабуть, хочете почати із ідеальної реституції та високого тертя, але лінійного та кутового демпфування та налаштування звідти.


Я спробував багато конфігурацій протягом декількох днів, але все-таки трапляється. Чи можу я отримати один хороший приклад ...?
Еоніл

3
Ваші значення щільності та тертя здаються дуже великими для Box2D.

4

Фізичні двигуни мають поріг відмов. Я не знаю, як це зробити в будь-якому з цих двигунів, але встановлений занадто високий поріг призведе до того, що він ігнорує удари з певною швидкістю. Опустіть поріг відмов, і він підстрибне на менших швидкостях.

Я знаю, що ви попросили іншого двигуна фізики, але всі фізичні двигуни, які я знаю, використовують пороги відмов, щоб утримати об'єкти від тремтіння, коли вони сидять один над одним. Отже, припустити, що хороший двигун фізики буде контрпродуктивним, оскільки будь-який хороший фізичний двигун матиме такий ефект.


0

У мене була ця проблема, і для мене рішення забезпечувало ідеальну реституцію.

Так що для мене це sqrt 0,5 для всіх об'єктів. Тому що sqrt (r1 * r1 + r2 * r2) == 1 в ідеальній ситуації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.