Я новичок в разработке игр / графики и играю с частицами (в 2D). Я хочу нарисовать частицы близко друг к другу как капли, так же как жидкость / вода. Я не хочу рисовать большие круги, накладывающиеся друг на друга, поскольку капля не будет гладкой (и слишком большой). Я не очень хорошо знаю физику, но предполагаю, что мне нужно нечто похожее на поверхностное натяжение.
Я не смог найти ничего на stackexchange или в Google (может быть, я не знаю правильных ключевых слов?). До сих пор я нашел два возможных решения, но я не могу найти какую-либо конкретную информацию об алгоритмах.
Одним из них является вычисление вогнутой оболочки частиц, которую я считаю шариком. Я могу вычислить блоб, создав класс эквивалентности (по отношению «близко друг к другу»). Как ни странно, я не смог найти ни одного алгоритма, объясняющего, как рассчитать вогнутый корпус. Многие публикации (и среди stackexchange) ссылаются на библиотеки или коммерческие продукты, которые делают это (мне нужны библиотеки для работы на C #), но никогда не используют алгоритм. Также это решение может иметь проблему с кругом частиц, который не обнаружит пустое пространство в середине.
Исследуя вогнутый корпус, я наткнулся на то, что называется альфа-формы. Кажется, это именно то, что я хочу сделать, однако, так же как и с вогнутым корпусом, я не нашел источника, объясняющего, как они на самом деле работают. Я нашел несколько презентационных материалов, но их недостаточно для продолжения. Это как большой секрет, все знают кроме меня: - /
После расчета вогнутой формы корпуса или альфа-формы я хочу сделать кривую Безье, чтобы сделать ее гладкой и красивой.
Хотя мой подход мне кажется слишком сложным, возможно, я пытаюсь решить эту проблему неправильно? Если вы можете предложить какое-либо иное решение моей проблемы или объяснить, что мне не хватает, я был бы очень рад и благодарен :-)
Благодарю.
Ответы:
Ключевое слово, которое вам может понадобиться, - «Metaballs» и варьируется от сложного образца Gem GeForce nVidia до демонстрационных версий, разработанных только для того, чтобы выглядеть хорошо и быстро работать.
источник
Чтобы преобразовать группу частиц в сетку для рендеринга в стиле metaballs, вы можете взглянуть на алгоритм Marching Cubes , который генерирует полигональную сетку из данных вокселей. Есть демо-сцена, демонстрирующая прекрасный пример, со всем, что генерируется на GPU: numb res .
источник
Как уже упоминалось выше, вы думаете о Metaballs.
Это отличная статья на эту тему с некоторыми теоретическими обсуждениями и примерами.
Изучение метаболов и изоповерхностей в 2D
источник