Я хочу сделать что-то подобное при переходе экрана с помощью OpenGL (с шейдерами). Я искал какой-то учебник или что-то в этом роде, но без какого-либо эффекта. Как я могу достичь этого эффекта? Эффект экрана/разрыва стекла
ответ
Один из самых популярных алгоритмов такого разрушительного эффекта включает диаграммы Вороного. Изучение этого вопроса даст вам подробную информацию об алгоритме, который может быть очень контролируемым и даст вам аналогичный эффект.
Однако он производит выпуклые полигоны как ячейки. У вашего изображения есть несколько вогнутых фигур, но VD будет очень хорошим началом. Вы могли бы, например, добиться подобных эффектов, объединив некоторые из полученных полигонов с диаграммы Вороного.
voroni digrams для этого использования сосут, потому что они генерируют только выпуклые сплиттеры. –
@NilsPipenbrinck Это правда, но, как уже упоминалось, выпуклые клетки могут быть объединены с некоторыми случайными соседями для создания вогнутых форм. Соответствующий DT также может служить отправной точкой для получения триангулированных осколков, которые могут быть объединены. Затем снова слияние в качестве этапа постпроцесса является накладными расходами, но я видел этот эффект, достигнутый в динамических симах с VD, посредством физических ограничений, которые удерживают определенные части вместе и, следовательно, вогнуты (что имеет аналогичный эффект, который будет иметь слияние). Вы знаете алгоритм, чтобы получить эту форму более непосредственно? – stinky472
Просто некоторые идеи о том, как вы можете сделать старт ..
- Если начать с 3D-сцены, сделать его в текстуру, используя RenderTarget, например.
- дро, в тот же самый размер холста случайных форм полигонов *
- Определить случайное смещение для перевода/вращения на полигоне
- перерисовывать изображение, найти в каком исходного многоугольника, оригинальная форма, если это так, преобразовать пиксел с то же преобразование, что и новый случайный преобразованный многоугольник
- заканчивается черной границей пикселей вокруг каждого многоугольника * Единственное, что можно сделать, чтобы получить начальные многоугольники, вы можете начать рисовать линию из случайной позиции со случайным направлением и случайной длиной , то из этой линии вы рисуете другую, пока не нажмете край, затем начните с вершины существующей строки и повторите ...
Google для случайного кода многоугольника, или триангуляции прямоугольник Перлина шум, Вороного (как указано выше) и т.д.
Вот метод избегая возиться с полигонов, а также позволяет более разнообразные эффекты:
Просто используйте маску. Сначала я объясню одну часть: просто нарисуйте свой основной текстурированный квад, падающий в случайном направлении, но используйте вторую текстуру, чтобы получить свою альфу. Эта вторая текстура (маска) - это просто черное изображение с белой фигурой, нарисованной на ней. Обратите внимание, что это позволяет иметь любую форму, а не только многоугольник. Теперь уже можно сделать тот эффект, который вам нужен, просто рисуя основной квадрат несколько раз, используя разные маски, но для этого требуется много текстур.
Таким образом, чтобы использовать только одну текстуру маски для всех частей, вы можете использовать шейдеры и вместо прямого использования значения маски в качестве альфа вместо этого использовать значение N (или диапазон вокруг N), что означает только непрозрачность для часть N. Теперь вам просто нужно увеличивать N до рендеринга каждой части. Чтобы создать маску, нарисуйте растровое изображение (с помощью редактора изображений) с черным зигзагом и заливайте заполненные полигоны с каждым оттенком серого из вашей палитры. Если вам нужно много штук, вы можете использовать более одного канала.
BtW должно быть легко сгенерировать эту маску с использованием растровых функций: просто создайте растровое изображение, нарисуйте некоторые случайные строки, сканируйте его и используйте заливку заливки на каждом пустом пикселе, увеличивая цвет каждый раз. По крайней мере, это кажется более простым, чем обработка полигонов.
Теперь, мне нравится, что вы можете иметь нерегулярные края бесплатно, а так как у вас есть вторая текстура, вы можете также использовать ее для добавления эффектов на основной, например, ваши черные границы или даже обработанные стекла различные уровни прозрачности.
Вы начинаете с 3D-сцены? Или вы начинаете с изображения, как вы показали? – user7116
Я начинаю с 3d сцены, но я могу использовать FBO. – user1232465