Я пытаюсь экспериментировать с 2D механизмами физики в C++. До сих пор кажется, что самым популярным является Box2D. К сожалению, Box2D является механизмом физики твердого тела, и это действительно не собирается помогать мне с тем, что я хочу попробовать.
Я хочу смочь определить форму, которая имеет много вершин, к которым присоединяются пружинами, такими, что, когда эта форма сталкивается с твердыми или другими нетвердыми формами, ее форма будет гибка.
Теперь я попытался думать о способах сделать это в Box2D с помощью только твердые тела, но всегда, кажется, существуют дефекты:
Таким образом, что лучший способ состоит в том, чтобы сделать этот вид физики в C++? Предпочтительно не имея необходимость писать весь механизм физики. Возможно, я просто пропускаю функцию Box2D. Возможно, это - просто не правильный выбор. Затем, каков правильный выбор?
Есть несколько пакеты / двигатели, поддерживающие деформируемые / мягкие тела. Если вам нужно что-то бесплатное, вы можете, например, проверить Phyz , SOFA или Bullet .
Подробный список можно найти в википедии . Большинство из них основаны на 3D, но вы можете адаптировать их к 2D-модели, настроив сцену как плоскость.
Удачного кодирования!
Я действительно не знаю, какой способ НАИЛУЧШИЙ, но здесь , ближе к концу страницы находится код для "пружин".
Если вы ищете только деформацию, я бы предложил использовать полигональную модель (trimesh), где я бы ловил обратные вызовы столкновений к жесткому телу, которое представляет эту форму. В точке столкновения я бы определил величину деформации, вызванной одной или несколькими вершинами.
Для снятия деформации я бы предложил, чтобы каждый временной интервал вы итеративно просматривали деформированные точки и пытались вытолкнуть их наружу. Я полагаю, что запрос может быть сделан через очень маленькие запросы сфер в мире столкновений. Это также потребует, чтобы вы сохранили "максимальную" недеформированную позицию.
Этот метод будет довольно прост в реализации, хотя это не будет "мягким телом", которое может быть тем, что вы ищете. http://chriscavanagh.wordpress.com/2008/06/24/silverlight-soft-body-physics/, кажется, является реализацией, которая предоставляет исходный код, который вы могли бы рассмотреть.