// данного луча от точки пересечения
6. Place the color in the rc-th pixel. II помещаем этот цвет в гс-й пиксел
}
В листинге 14.1 приводятся основные этапы работы трассировщика луча. Сцена, подлежащая трассировке, заполнена различными геометрическими объектами и источниками света. Типичная сцена может содержать сферы, конусы, параллелепипеды, цилиндры и тому подобные тела, каждое из которых имеет определенную форму, размер и положение. Все эти объекты определенным образом описываются и помещаются в список объектов. Кроме этого, уже описанным образом создается камера. Затем поочередно для каждого пиксела мы конструируем луч, начинающийся в точке глаза и проходящий через нижний левый угол пиксела. Это делается простым вычислением направления dir^ для гс-луча.
Шаги 3-5 псевдокода являются новыми и подробно описываются в следующих разделах. Вначале найдем, пересекается ли rc-луч с каждым объектом из списка, и если да, то запишем «время соударения» - значение г, при котором луч r(t) совпадает с поверхностью объекта. После проверки всех объектов ближайшим к глазу будет объект с наименьшим временем соударения. Затем находим положение «точки соударения» с этим объектом, а также нормальный вектор к поверхности объекта в этой точке. Далее вычисляется и записывается в пиксел цвет света, отраженного от объекта в направлении глаза.
На рис. 14.4 показана простая сцена, состоящая из нескольких цилиндров и сфер, а также трех конусов. Снеговик состоит преимущественно из сфер. (Из каких примитивов состоит его шляпа?) Показаны также два источника света. Отметим, что объекты сцены могут быть взаимопроникающими. Что касается данной картины, то нас интересуют, конечно, ближайшие внешние поверхности.
Описания всех объектов хранятся в списке объектов (object list), который на рисунке представлен в виде связного списка дескриптивных записей. Показанный на рисунке луч пересекает сферу, цилиндр и два конуса. Все остальные объекты лучом пропускаются. Определяется объект с наименьшим временем соударения - в данной сцене это цилиндр. Точка соударения Рш легко определяется из самого луча - подстановкой в уравнение луча (14.3) момента времени fhjt: