Эффект разбития экрана / стекла - PullRequest
3 голосов
/ 27 февраля 2012

Я хочу сделать что-то подобное при переходе с экрана, используя OpenGL (с шейдерами)Я искал какой-то учебник или что-то подобное, но безрезультатно.Как я могу достичь этого эффекта?enter image description here

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Просто несколько идей о том, как вы можете начать. ..

  1. Если вы начинаете с 3D-сцены, визуализируйте ее в текстуру, например, с помощью rendertarget.
  2. Нарисуйте в холсте того же размера случайные многоугольники *
  3. Определите случайное смещение для сдвига / поворота для каждого многоугольника
  4. перерисовайте изображение, найдите, в какой исходный многоугольник исходная форма преобразуется, если это так, преобразуйтепиксель с тем же преобразованием, что и у нового произвольно преобразованного многоугольника
  5. , заканчивается черной рамкой вокруг каждого многоугольника * Единственное, как получить начальные многоугольники, вы можете начать рисовать линию из случайного положения со случайнымнаправление и случайную длину, затем из этой линии вы рисуете другую, пока не достигнете края, затем начните с вершины существующей линии и повторите ...

Google для случайного кода многоугольника,или триангуляции прямоугольного шума Перлина, диаграмм Вороного (как упомянуто выше) и т. д.

1 голос
/ 28 февраля 2012

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

Однако, это производит выпуклые многоугольники как ячейки. Ваше изображение имеет несколько вогнутых частей, но VD будет очень хорошим началом. Например, вы можете добиться аналогичных эффектов, объединив некоторые из полученных многоугольников из диаграммы Вороного.

0 голосов
/ 28 февраля 2012

Вот метод, позволяющий избежать возни с полигонами, а также допускающий более разнообразные эффекты:

Просто используйте маску. Сначала я объясню одну часть: просто нарисуйте свой основной текстурированный квад, падающий в случайном направлении, но используйте вторую текстуру, чтобы получить его альфа. Эта вторая текстура (маска) представляет собой просто черное изображение с нарисованным белым куском. Обратите внимание, что он позволяет иметь любую форму, а не только многоугольник. Теперь уже можно добиться желаемого эффекта, просто несколько раз нарисовав основной квад с использованием разных масок, но для этого нужно много текстур.

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

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

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

...