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