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 ниже приводятся варианты расположения бликов на этом отрезке.


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