Box2D моделирование гибких волосоподобных объектов - PullRequest
2 голосов
/ 16 июня 2011

Я собираюсь смоделировать несколько тонких и гибких прядей / волосков / шипов / линий в Box2D и задаюсь вопросом, как лучше всего это сделать.Я гуглил и видел нечто, называемое линейными сегментами (http://www.box2d.org/forum/viewtopic.php?f=8&t=1437), но, похоже, это просто расширение для порта Flash - я надеялся сделать это не зависящим от платформы способом.

IЯ предполагаю, что мне придется делать это с цепочками тонких коробок, но есть ли у кого-нибудь какие-либо советы или вещи, которые нужно остерегаться?

Обновление: Благодаря обратной связи ниже вариантов, такдалеко:

  • Сделайте пружинящие вращающиеся соединения, отслеживая угол и устанавливая скорость двигателя - на форуме Box2D есть нить: http://www.box2d.org/forum/viewtopic.php?f=3&t=1007
  • Прикрепите упругийРасстояние между сегментами (см. диаграмму - похоже на то, как люди приближаются к мягким телам).

    Distance joint example

  • Drop Box 2D и использовать систему верлетов / частиц, если естьнеобходимо минимальное столкновение (к сожалению, для меня это невозможно).

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

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

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

2 голосов
/ 28 сентября 2013

Вы, ребята, поднимаете замечательные вопросы о производительности.

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

Добавление случайности может дать хороший эффект.

Я написал статью о моделировании ствола дерева, которая связана и может быть полезна для некоторых людей: http://aaronfarr.com/coding/simulating-a-tree-in-box2dweb/

Обновление: я собрал демо симуляции травы, используя эту идею: http://aaronfarr.com/coding/simulating-grass-using-box2d/

Example of simulated grass in Box2D

1 голос
/ 16 июня 2011

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

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

Извините, я не могу привести вам конкретные примеры, поскольку у меня никогда не было необходимости делать такие вещи.

...