Как сделать 2D-физический движок физического тела?
Определение твердого тела в Box2d
Кусок материи, который настолько силен что расстояние между любыми двумя битами вещества на куске полностью постоянная.
И это именно то, чего я не хочу, поскольку я хотел бы сделать 2D (возможно, в конечном итоге 3D), эластичные, деформируемые, ломающиеся и даже липкие тела.
То, что я надеюсь выйти из этого сообщества, - это ресурсы, которые учат меня математике за то, как объекты изгибаются, ломаются и взаимодействуют. Меня не волнуют молекулярные или химические свойства этих объектов, и часто это все, что я нахожу, когда пытаюсь найти , как рассчитать, какой кусок дерева, металла, резины, слизи, жидкости, органических материалов и т.д. может выглядеть так, как только к нему прикладывается сила.
Кроме того, я очень визуальный человек, поэтому диаграммы и т.д. являются Чрезвычайно полезными для меня.
=============================================== ================================
Игнорируйте эти вопросы, они старые, и я сохраняю их только в контекстных целях
1. Есть ли там какие-либо простые 2D-физические двигатели физики тела?
предпочтительно свободный или с открытым исходным кодом?
2. Если бы не было возможности сделать мои собственные, не тратя на это годы?
3. Могу ли я использовать существующие двигатели, такие как bullet и box2d, в качестве старта и просто преобразовать их код, или это просто приведет к большему количеству проблем позже, учитывая мой 1 год опыта программирования и пулю, являющуюся 3D?
4. Наконец, если бы я должен был преобразовать другую библиотеку, это был бы лучший вариант box2D уже 2d-кода, Bullet уже мягкий код или смешение обоих исходных кодов?
Спасибо!
Ответы
Ответ 1
(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) Основываясь на том, что я только что сказал, вы наверняка знаете ответ. Если вы приключенческий сорт и у вас есть время, чтобы убить и желание учиться, тогда я говорю, иди за ним! Конечно, сначала будет сложно, но со временем все станет легче. Кроме того, изучение нового материала очень забавно!
С другой стороны, если вы просто хотите получить результаты сейчас, то не делайте этого. Это займет много времени, и вы, вероятно, потерпите неудачу (много). Если вы просто хотите создавать игры, то придерживайтесь существующих библиотек и строите любые абстракции, которые он вам предоставляет.
Ответ 2
Быстрый и частичный ответ:
- жесткое тело легко моделируется из-за их свойства (вы можете использовать физические инструменты, такие как Torseur + (ссылка на французский на wikipedia, английские эквивалентные точки для винтов теория) для моделирования сил, применяемых в любой точке вашего элемента.
- для сравнения, твердые элементы движутся от почти сплошного (думаю, очень твердый каучук: он может двигаться, но почти твердый) до почти жидкого (думаю, очень мягкий руттер, латекс). Это означает, что динамические свойства, применяемые к этому knd объектов, очень сложны и зависят от характера объекта.
- Возьмем пример spring: он легко моделируется независимо (f = kx), но создание универсального инструмента, способного моделировать этот конкретный случай - это кошмар (особенно, если вы думаете о случаях в углу: расширение не бесконечно, сжатие достигает нижней точки, материал нелинейный...)
- Насколько я знаю, когда речь идет о "эластичных" материалах, люди делают свою собственную моделью для своей собственной цели (общего не существует).
теперь ответы:
- Возможно, нет, не знаю, что я знаю, по крайней мере
- не легко, см. ранее, почему
- Если вы не получили высокий уровень фона в эластичных материалах, я боюсь, что это будет болезненно.
Надеюсь, что это помогло
Ответ 3
Некоторые конкретные случаи, такие как деформируемые шары, можно хорошо моделировать с помощью spring -локальных тел:
![введите описание изображения здесь]()
Вот пример реализации с cocos2d: http://2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html
Ответ 4
В зависимости от сложности деформируемых объектов, которые вам нужны, вы можете имитировать их с помощью box2d, ограничивая жесткие тела суставами или пружинами. Я делал это в прошлом, используя клон box2d для xna (farseer), и он работал красиво. Надеюсь, это поможет.
Ответ 5
Физика вашего вопроса распадается на две разные темы:
- Неупругие столкновения: Математика здесь проста, и вы можете написать довольно приличную библиотеку самостоятельно, не слишком много работая над 2D-очками/шарами. (И с большей работой вы могли бы изучить физику для расширенных тел.)
- Изгиб материалов и разрыв: это будет сложно. В общем, вам придется моделировать многие из тем в машиностроении:
Я не блещу. Моделирование изгиба и разрушения материалов, в общем, является очень подробной и разнообразной темой. Это займет много времени. И единственный способ добиться успеха - это понять науку достаточно хорошо, чтобы вы могли делать умные ярлыки, ограничивая область науки, которую нужно моделировать в своей игре.
Однако другая половина вашей проблемы (моделирование Неупругие столкновения) является гораздо более достижимой целью.
Удачи!