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

Обычно в качестве такой текстуры (мы будем далее называть ее микро-фасетной) используется изображение в градациях серого цвета (grey-scale) с досточно большим разрешением.

Способ вывода микрофасетной текстуры обычно берется равным (GL_DST_COLOR, GLSRCCOLOR), что приводит к тому, что результирующий цвет пиксела определяется следующей формулой: С =2-С . -С, , (12.4)

res mam det ' 4*^-^7

где СпшЫ - цвет соответствующего пиксела основной текстуры; Cda - цвет микрофасетной текстуры.

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

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

Добавляем эффекты

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

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

void SubScene :: drawDetails ( Views view,
const Arrays polyList ) const
{
if ( World :: detailTexture == NULL ) return;

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