В основе данного метода лежит принцип, согласно которому любые точки на сцене, «скрытые» от источника света, должны находиться в тени. С другой стороны, если между точкой и источником света не раположен никакой объект, то эта точка не находится в тени. Буфер теней содержит «картину глубин» («depth picture») всей сцены с точки наблюдения, совпадающей с источником света: каждый элемент буфера записывает расстояние от источника света до ближайшего объекта в соответствующем направлении.

8.6. Добавление теней объектов Визуализация при этом выполняется в две стадии. 1. Загрузка буфера теней.

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

Для большей наглядности на рис. 8.66 показана сцена, рассматриваемая обычной «камерой-глазом» и «камерой-источником», расположенной в источнике света. Предположим, что точка Р находится на луче, выходящем из источника света и проходящим через «пиксел» </[*'][/| буфера теней, и пусть точка В на пирамиде также находится на этом луче. Если пирамида присутствует, то пиксел «?[*][/] содержит псевдоглубину до точки В; если же пирамида отсутствует, то пиксел </[*'][/] будет содержать псевдоглубину до точки Р.

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

2. Визуализация сцены.

Визуализация каждой грани на сцене с использованием камеры-глаза производится как обычно. Пусть эта камера «видит» точку Р через пиксел р[с][г]. Тогда при визуализации пикселар[с][г] нужно найти1:


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