Имитация потока жидкости по карте высот - PullRequest
7 голосов
/ 06 августа 2011

Я ищу способ приблизить объем жидкости, движущейся по карте высот.Самое простое решение, которое я могу придумать, - это аппроксимировать его большим количеством неотрисованных сфер малого диаметра (<0,1 м).Затем я поместил бы видимую плоскость, представляющую поверхность воды, на «вершину» сфер в местах, где они остановились.Насколько мне известно, никакие управляемые физические движки не содержат встроенного симулятора жидкости, поэтому вопрос. </p>

Реализация будет состоять в использовании физического движка, такого как JigLibX, который способен моделировать движение сфер.Чтобы определить высоту плоскостей, я думал об усреднении максимальной высоты каждой сферы, которая находится в верхнем слое группировки.

Я не ожидаю, что производительность будет отличной, но будет ли она доступна в режиме реального времени?Если нет, могу ли я использовать это моделирование для предварительного обжига линий потока?

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

Спасибо за любую помощь, Venatu

(Если это уместно, моей целевой платформой является XNA 4.0, использующая C #. Windows только на данный момент, поэтому PhysX / Havok являются возможностями для симуляции, но я бы предпочел управляемое решение)

Ответы [ 3 ]

2 голосов
/ 06 августа 2011

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

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

Это большая и сложная тема, но я надеюсь, что это дало хоть какое-то понимание!

1 голос
/ 19 августа 2011

Самым популярным методом для моделирования жидкостей в режиме реального времени является Гидродинамика сглаженных частиц .

Несколько полезных ссылок:

http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics

http://http.developer.nvidia.com/GPUGems/gpugems_ch38.html

http://www.plunk.org/~trina/thesis/html/thesis_toc.html

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

И вы правы, не существует законченных 2d решений для гидродинамики.

0 голосов
/ 13 октября 2011
...