На данном этапе платформа и язык программирования не имеют значения, я просто хотел бы знать, существует ли что-то для этого. Любая помощь приветствуется.
На данном этапе платформа и язык программирования не имеют значения, я просто хотел бы знать, существует ли что-то для этого. Любая помощь приветствуется.
Ответы:
Посмотрите, что Q-Games использовали для Pixeljunk Shooter. Это 2d игра с довольно сложной физикой флюидов. Я не уверен, использовали ли они доморощенный или физический движок промежуточного программного обеспечения, но информация, вероятно, где-то там.
Ну, я не смотрел на это, но я точно знаю, что практически любой физический движок может подражать этой идее. Box2D и др.
В основном, частицы отскакивают вокруг, от поверхностей и друг от друга (быстрее для газов), но также дают им эффект, подобный постоянной гравитации (у жидкостей все будет одинаковым, но некоторые газы могут подняться медленно).
Если вы соедините внешние частицы, вы получите многоугольную форму, представляющую массу
ИЛИ
если вы просто нарисуете пиксель или графическое изображение частиц над каждой частицей, вы можете вместо этого получить эффект облака для массы.
Единственная библиотека, в которой я могу найти информацию о жидкостях, - это Fluidic . Это довольно альфа и только один релиз. Библиотека физики Bullet поддерживает «гидродинамику сглаженных частиц», метод, используемый для моделирования жидкостей. Хотя библиотека ориентирована на 3D, вы можете применить ограничения к одной оси, чтобы она работала в 2D.
Я бы рекомендовал, как я уже упоминал в некоторых комментариях к другим ответам, использовать стандартный физический движок, такой как Box2D или Бурундук, и использовать несколько кругов для моделирования воды (с гравитацией) или газа (без гравитации) и комбинировать их вместе. в одно водное или газовое тело. Вы можете применить некоторые ограничения к отдельным телам, чтобы они «слипались» вместе, чтобы вы могли имитировать вязкость. Посмотрите это видео, чтобы увидеть, как отдельные тела (смоделированные как квадраты в видео) работают вместе. Обратите внимание, однако, что техника, используемая в этом видео, отличается от упомянутой в этом параграфе. Вы можете использовать видео, чтобы понять, как круги взаимодействуют друг с другом, и попытаться имитировать это с помощью ограничений, присутствующих в используемой библиотеке физики.
Интересная часть приходит, когда вы хотите объединить несколько кругов в водоем. Самое простое решение, которое я могу придумать, это нарисовать каждый круг в виде метабола, чтобы они выглядели как часть большего тела. Вы можете найти математику и пример кода за этими телами здесь .
Прошло несколько лет с тех пор, как этот вопрос был опубликован, но я наткнулся на него во время поиска, поэтому я решил обновить его.
Google выпустил LiquidFun (с открытым исходным кодом) для системы Box2D. У него есть некоторые ограничения, но это быстрый способ начать работу с частицами жидкости, песка и т. Д. С довольно приличной производительностью.
https://github.com/google/liquidfun
У PixelJunk отличный подход, но это частная библиотека. Они рассказали об удивительном уровне деталей в своем выступлении на GCD 2010.