feeler.start - hitPoint-e ray.dir.
feeler.recurselevel - 1:
color - ambient part;
for(each light source. L)
// для каждого источника света L
{
feel er.dir = L.pos-hitPoint: if(isInShadow(feeler))continue: color.add(diffuse light): color.add(specular light):
}
Введение в трассировку лучей
Код возможной реализации самой подпрограммы isInShadowO выглядит следующим образом:
bool Scene :: 1sInShadow(Ray& f) {
forCGeomObj* p - obj: p: p - p->next)
1f(p->hit(f))return true: return false:
}
Отметим, что в этой подпрограмме просто просматривается список объектов в поисках соударения; если соударение найдено, то возвращается false. Если ни одного соударения не обнаружено, то возвращается true. В этой подпрограмме используется упрощенный вариант метода hit О для каждого типа объекта, который принимает только один аргумент - для него не нужно создавать запись пересечения. Этот вариант метода hit() отличается от того, с которым мы работали до сих пор, по следующим трем пунктам:
1. Он учитывает только те соударения, для которых время соударения лежит между нулем и единицей, поскольку объект, находящийся за источником света, не отбрасывает тени.
2. Если такое соударение обнаружено, то метод закрывается немедленно, без вычисления каких-либо данных о самом соударении.
3. Метод не может использовать проекционные экстенты, поскольку щупы теней могут начинаться с любой точки сцены. Поэтому он проделает некоторую тщательно выбранную комбинацию тестов со сферическим и/или прямоугольным экстентами для каждого типа объекта.
14.11. Отражения и прозрачность
Одним из наиболее сильных сторон метода трассировки лучей является та простота, с которой в нем имитируется как отражение, так и преломление света. Это позволяет создавать высокореалистичные сцены1, включающие зеркала, аквариумы, линзы и т. п. Могут изображаться множественные отражения, когда свет, перед тем как дойти до наблюдателя, отражается от нескольких блестящих поверхностей, а также сложные сочетания преломления и отражения. В каждом из таких процессов требуется создание и трассировка вспомогательных лучей.