for (int і = firstSurface; і <= lastSurface; i++ )
if (isSurfaceFrontFacing ( surfaces [surfaceList [i]] )) sBuffer -> addSurface ( surfaces [surfaceList [i]]);
}
void BSPFile :: render ( Hull& hull) {
visLeaves.deleteAII (); sBuffer.reset ();
curLeaf = NULL;
traverseBSPTree ( hull.node );
for (int і = visLeaves.getCount () -1; і >= 0; і--) renderLeaf (*(BSPLeaf *) visLeaves [i] );
sBuffer.render ();
}
void BSPFile :: render () {
resetZBuffer ();
for (int і = 0; і < numHulls; i++ ) render ( hulls [i] );
}

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

13. Элементы виртуальной реальности карты освещенности выпускаются лучи ко всем источникам света, определяя тем самым первичную (непосредственную) освещенность точки.

Для наложения карты освещенности на текстуру она сначала билинейно интерполируется (для получения значений освещенности во всех промежуточных точках) и накладывается на текстуру. Для повышения качества изображения, применяется пирамидальное фильтрование (mip-mapping) со степенями сжатия 1, 2, 4 и 8.

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

Поскольку грани могут иметь произвольную ориентацию, то методы текстурирова-ния горизонтальных и вертикальных поверхностей уже не годятся. Вместо этого используется интерполяционный метод, когда значения индексов текстуры через каждые 8 или 16 пикселов (в зависимости от разрешения) вычисляются точно, а в промежутках используется линейная интерполяция. Подобный подход позволяет при сравнительно небольших затратах получать изображение с достаточно высокой степенью реалистичности.

d9ba7291.


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