Нетвердое тело 2D механизмы физики в C++

Я пытаюсь экспериментировать с 2D механизмами физики в C++. До сих пор кажется, что самым популярным является Box2D. К сожалению, Box2D является механизмом физики твердого тела, и это действительно не собирается помогать мне с тем, что я хочу попробовать.

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

Теперь я попытался думать о способах сделать это в Box2D с помощью только твердые тела, но всегда, кажется, существуют дефекты:

  1. Используйте прямоугольники или линейные сегменты для внешних краев гибкой формы. Они столкнутся с другими формами. К сожалению, они не эластичны, таким образом, желаемый эффект не был бы замечен.
  2. Каждая вершина формы могла быть телом со своей собственной маленькой круговой формой. Эти тела могут затем быть объединены пружинами. Это работало бы отлично с точки зрения деформации формы, но вообразило бы, передала ли форма, посаженная на твердый скачок и скачок просто, между вершинами. Затем форма стала бы застрявшей на скачке.

Таким образом, что лучший способ состоит в том, чтобы сделать этот вид физики в C++? Предпочтительно не имея необходимость писать весь механизм физики. Возможно, я просто пропускаю функцию Box2D. Возможно, это - просто не правильный выбор. Затем, каков правильный выбор?

8
задан ProgramFOX 15 November 2013 в 17:27
поделиться

3 ответа

Есть несколько пакеты / двигатели, поддерживающие деформируемые / мягкие тела. Если вам нужно что-то бесплатное, вы можете, например, проверить Phyz , SOFA или Bullet .

Подробный список можно найти в википедии . Большинство из них основаны на 3D, но вы можете адаптировать их к 2D-модели, настроив сцену как плоскость.

Удачного кодирования!

3
ответ дан 5 December 2019 в 23:13
поделиться

Я действительно не знаю, какой способ НАИЛУЧШИЙ, но здесь , ближе к концу страницы находится код для "пружин".

0
ответ дан 5 December 2019 в 23:13
поделиться

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

Для снятия деформации я бы предложил, чтобы каждый временной интервал вы итеративно просматривали деформированные точки и пытались вытолкнуть их наружу. Я полагаю, что запрос может быть сделан через очень маленькие запросы сфер в мире столкновений. Это также потребует, чтобы вы сохранили "максимальную" недеформированную позицию.

Этот метод будет довольно прост в реализации, хотя это не будет "мягким телом", которое может быть тем, что вы ищете. http://chriscavanagh.wordpress.com/2008/06/24/silverlight-soft-body-physics/, кажется, является реализацией, которая предоставляет исходный код, который вы могли бы рассмотреть.

1
ответ дан 5 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: