Преимущества данной технологии рендеринга в том, что с ее помощью можно создавать довольно сложные системы с минимальными усилиями. С другой стороны, их можно усложнять или, наоборот, упрощать. Билл Ривз в статье [8] отмечает: «Самое важное в системах частиц - то, что они меняются: такое поведение делает объекты очень реалистичными».

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

Анимированные шейдеры

Код, приведенный в листинге 13.3, представляет собой программу на языке С, создающую начальные значения для нашей системы частиц. Для каждой частицы задаются начальные координаты, выбранный случайным образом цвет, случайное (с некоторыми ограничениями) значение скорости и случайное время появления.

Функция createPoints позволяет создавать двухмерную сетку из точек произвольного размера. В принципе, в сетке нет необходимости, но эффект разлета частиц из сетки, как кусочков поп-корна, выглядит интересно. Проще всего определить систему частиц в одномерном массиве, тогда все координаты вершин будут иметь одинаковое начальное значение (например, (0, 0, 0)).

Однако в этом шейдере частицы определены в двухмерном массиве, размеры которого и определяют количество создаваемых частиц. После выделения памяти под массивы во вложенном цикле вычисляются значения для каждого из атрибутов частицы в каждой ячейке сетки. В каждом наборе координат гу-компонент будет равен 0, а х- и 2-компоненты будут различными для каждой новой ячейки. Каждое значение цвета определяется случайным образом из диапазона [0,5,1,0] - для того чтобы цвета были светлыми, пастельными. Векторы направления движения тоже случайны, но имеют строгий уклон вниз - для этого их «/-координата умножается на 10. В общем движение частиц направлено в сторону добавлением числа 3 к х- и 2-координатам. И наконец, каждой частице назначается начальное значение времени из диапазона [0, 10].


⇐ Предыдущая| |Следующая ⇒