Как сделать 2D-физический движок физического тела?

Определение твердого тела в Box2d

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

И это именно то, чего я не хочу, поскольку я хотел бы сделать 2D (возможно, в конечном итоге 3D), эластичные, деформируемые, ломающиеся и даже липкие тела.

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

Кроме того, я очень визуальный человек, поэтому диаграммы и т.д. являются Чрезвычайно полезными для меня.

=============================================== ================================

Игнорируйте эти вопросы, они старые, и я сохраняю их только в контекстных целях

1. Есть ли там какие-либо простые 2D-физические двигатели физики тела? предпочтительно свободный или с открытым исходным кодом?

2. Если бы не было возможности сделать мои собственные, не тратя на это годы?

3. Могу ли я использовать существующие двигатели, такие как bullet и box2d, в качестве старта и просто преобразовать их код, или это просто приведет к большему количеству проблем позже, учитывая мой 1 год опыта программирования и пулю, являющуюся 3D?

4. Наконец, если бы я должен был преобразовать другую библиотеку, это был бы лучший вариант box2D уже 2d-кода, Bullet уже мягкий код или смешение обоих исходных кодов?


Спасибо!

29
задан 28 июня '11 в 7:57
источник поделиться
5 ответов

(1) Как Bullet, так и PhysX поддерживают деформируемые объекты в некоторой емкости. Bullet имеет открытый исходный код, и PhysX является бесплатным. Оба имеют порты для окон, mac, linux и всех основных консолей.

(2) Вы могли бы взломать что-то вместе, если вы действительно знаете, что делаете, и это может даже сработать. Тем не менее, вероятно, будут ошибки, если у вас не будет четкого понимания того, как работает Box2D последовательный решатель ограничений импульсов, и какие типы мер будут необходимы для поддержания стабильности вашей системы. Тем не менее, существует множество способов получить деформируемые объекты, работающие с минимальными проблемами в игровой среде. Первый вариант - принять второе (или более высокое) приближение порядка деформации. Это позволяет вам справляться с деформациями во многом так же, как вы имеете дело с жесткими движениями, только теперь у вас есть несколько дополнительных степеней свободы. См., Например, следующую бумагу:

http://www.matthiasmueller.info/publications/MeshlessDeformations_SIG05.pdf

Второй метод - мягкие тела давления, которые в основном моделируют тело как набор частиц с некоторыми ограничениями расстояния и силами давления. Это то, что делают PhysX и Bullet, и это довольно стандартная техника к настоящему времени (например, Gish использовал ее):

http://citeseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.4.2828%26rep%3Drep1%26type%3Dpdf

Если вы google вокруг, вы можете найти множество руководств по ее реализации, но я не могу ручаться за их качество. Наконец, появился более новый толчок к попытке сделать деформируемые объекты "правильным" способом с использованием реалистичных моделей упругости и подходов с конечным элементом. Это все еще область активных исследований, поэтому это не для слабонервных. Например, вы могли бы посмотреть на любое количество документов в этом году на заседаниях SIGGRAPH:

http://kesen.realtimerendering.com/sig2011.html

(3) Вероятно, нет. Хотя есть определенные игры в стиле 2D, которые могут работать с движком 3D-физики (например, игры с верхним типом) для специальных эффектов.

(4) Основываясь на том, что я только что сказал, вы наверняка знаете ответ. Если вы приключенческий сорт и у вас есть время, чтобы убить и желание учиться, тогда я говорю, иди за ним! Конечно, сначала будет сложно, но со временем все станет легче. Кроме того, изучение нового материала очень забавно!

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

17
ответ дан 28 июня '11 в 8:54
источник

Быстрый и частичный ответ:

  • жесткое тело легко моделируется из-за их свойства (вы можете использовать физические инструменты, такие как Torseur + (ссылка на французский на wikipedia, английские эквивалентные точки для винтов теория) для моделирования сил, применяемых в любой точке вашего элемента.
  • для сравнения, твердые элементы движутся от почти сплошного (думаю, очень твердый каучук: он может двигаться, но почти твердый) до почти жидкого (думаю, очень мягкий руттер, латекс). Это означает, что динамические свойства, применяемые к этому knd объектов, очень сложны и зависят от характера объекта.
  • Возьмем пример spring: он легко моделируется независимо (f = kx), но создание универсального инструмента, способного моделировать этот конкретный случай - это кошмар (особенно, если вы думаете о случаях в углу: расширение не бесконечно, сжатие достигает нижней точки, материал нелинейный...)
  • Насколько я знаю, когда речь идет о "эластичных" материалах, люди делают свою собственную моделью для своей собственной цели (общего не существует).

теперь ответы:

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

Надеюсь, что это помогло

5
ответ дан 28 июня '11 в 8:14
источник

Некоторые конкретные случаи, такие как деформируемые шары, можно хорошо моделировать с помощью spring -локальных тел: введите описание изображения здесь

Вот пример реализации с cocos2d: http://2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html

3
ответ дан 02 июля '14 в 15:21
источник

В зависимости от сложности деформируемых объектов, которые вам нужны, вы можете имитировать их с помощью box2d, ограничивая жесткие тела суставами или пружинами. Я делал это в прошлом, используя клон box2d для xna (farseer), и он работал красиво. Надеюсь, это поможет.

2
ответ дан 08 июля '11 в 0:21
источник

Физика вашего вопроса распадается на две разные темы:

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

Однако другая половина вашей проблемы (моделирование Неупругие столкновения) является гораздо более достижимой целью.

Удачи!

1
ответ дан 04 окт. '12 в 23:57
источник

Другие вопросы по меткам или Задайте вопрос