На даний момент платформа та мова програмування не мають значення, я хотів би просто знати, чи існує щось для цього. Будь-яка допомога вдячна.
На даний момент платформа та мова програмування не мають значення, я хотів би просто знати, чи існує щось для цього. Будь-яка допомога вдячна.
Відповіді:
Подивіться, які Q-ігри використовували для Pixeljunk Shooter. Це 2d гра з досить активною фізикою рідини. Я не впевнений, чи використовували вони двигун фізики доморощеного або середнього програмного забезпечення, але інформація, ймовірно, десь там.
Добре, що я не розглядав це, але я знаю, що майже будь-який двигун фізики може наслідувати цю ідею. Box2D тощо.
В основному частинки, що підстрибують навколо, від поверхні та інше (швидше для газів), але також надають їм постійну гравітацію, як ефект (всі рідини матимуть однаковий характер, але деякі гази, які ви хочете повільно підніматися).
Якщо зв’язати зовнішні частинки, ви отримаєте багатокутну форму, що представляє масу
АБО
якщо просто намалювати піксель або графік частинок над кожною частинкою, ви можете досягти ефекту хмари для маси.
Єдина бібліотека, яку я міг би придумати, що спеціально стосується рідин, - це Fluidic . Це досить альфа і має лише один випуск, хоча. Бібліотека фізики Bullet підтримує «гідродинаміку згладжених частинок», техніку, що використовується для моделювання рідин. Хоча бібліотека спрямована на 3D, ви можете застосувати обмеження до однієї осі, щоб змусити її працювати в 2D.
Як я вже згадував у деяких коментарях до інших відповідей, я рекомендував би використовувати стандартний фізичний двигун, як Box2D або бурундук, а також використовувати декілька кіл для моделювання води (з силою тяжіння) або газу (без сили тяжіння) та комбінувати їх разом в одне водойма або газ. Ви можете застосувати деякі обмеження до окремих тіл, щоб вони згустилися, щоб імітувати в'язкість. Погляньте на це відео, щоб побачити, як працюють окремі тіла (змальовані як квадрати на відео). Зауважте, однак, що техніка, використана в цьому відео, не є такою, як зазначено в цьому пункті. Ви можете скористатися відео, щоб зрозуміти, як кола взаємодіють між собою, і спробувати імітувати це з обмеженнями, наявними в бібліотеці фізики.
Цікава частина виходить, коли ви хочете об'єднати кілька кіл у воду. Найпростіше рішення, яке я можу придумати, - це малювати кожне коло як метабол, щоб вони з'являлися як частина більшого тіла. Ви можете знайти математику і деякі приклади коду позаду цих тіл тут .
Минуло кілька років з моменту опублікування цього питання, але я натрапив на нього під час пошуку, тому подумав, що оновлю його.
Google випустив LiquidFun (відкритий код) для системи Box2D. Він має деякі обмеження, але це швидкий спосіб розпочати роботу з рідкими, піском тощо частинками з досить пристойними робочими характеристиками.
https://github.com/google/liquidfun
PixelJunk має чудовий підхід, але це приватна бібліотека. Вони поділилися дивовижним рівнем деталей у своїй розмові на GCD 2010.