cur = cur -> next;
}
updateBoundingBox (); lastUpdateTime = curTime;
}
Пример задания достаточно реалистически выглядящего огня также приводится ниже.
У
fire f {
pos ( 0, 0.7, 2 )
texture "../Textures/Flares/fIare32.tga"
particles-per-second 300
life-time 0.2
radius 0.001
speed 0.13
src-color ( 1, 1, 0.2, 1 )
dst-color ( 0.5, 0, 0, 0.25 )
}
На компакт-диске содержатся реализации еще двух систем частиц -Snow и MagicSphere.
Хало, блики на линзах
Последние два из рассматриваемых эффектов связаны с источниками света. Яркий источник света, во-первых, вызывает появление бликов на линзах объектива (lens flare) и, во-вторых, гало (halo), когда яркие пикселы, соответствующие проекции источника света, как бы "размываются", что приводит к увеличению яркости соседних пикселов.
При работе с источниками света мы будем опираться на материал гл. 10, в частности мы будем использовать метод pointVisibleFrom для определения видимости источника света из положения наблюдателя.
Заметим, что если источник света невидим, то никаких эффектов он не производит и может быть полностью проигнорирован.
В случае же, когда источник света виден, то для него можно нарисовать и гало и блики (что именно, будет определяться атрибутами источника).
Пусть источник света проектируется в точку (Рх, Ру) на экране (для нахождения этой точки удобно воспользоваться методом mapToScreen класса Camera). Тогда достаточно вывести с центром в этой точке текстуру, представляющую собой размытое пятно соответствующего цвета с режимом наложения, соответствующим сложению цветов (GL_ONE, GL_ONE).
Работа с бликами на линзах несколько сложнее, но также может быть легко реализована.
Пусть (Рх, Ру), как и ранее, экранные координаты проекции видимого источника света, а (Сх, Су) - координаты центра экрана. Тогда на отрезке, соединяющем эти две точки, выводятся несколько промасштабированных изображений бликов света. В табл. 12.1 ниже приводятся варианты расположения бликов на этом отрезке.