Вычисление проекционных экстентов Па этапе предварительной подготовки для каждого объекта сцены необходимо вычислить проекционный экстент. Этот экстент легко вычисляется по заданному кластеру точек объекта. Кластер точек базового объекта переводится в мировые координаты с помощью преобразования, соответствующего этому объекту, - так же, как это делалось для сферического и прямоугольного экстентов, в результате чего этот кластер становится «облаком» точекр[0],/?[1],…, размещенных па сцепе. IIa рис. 14.41 показано 12 точек кластера для преобразованного цилиндра.
Теперь каждая из точек p[i\ проецируется на ближнюю плоскость камеры. Для любой точки /; па сцене можно найти ее проекцию р' с помощью вычислений, основанных на положении точки /; и reo-
Введение в трассировку лучей
метрии камеры. Спроецированная точка р' связана с определенными строкой г и столбцом с. (Выражение для этой связи выводится в упражнениях в конце раздела.) В результате точка р проецируется в пиксел с координатами (г, с), где
(14.41)
(Перед записью выражений в правой части соответственно в г и с их необходимо округлить до целого.) Здесь Ри, Pv, Рп являются скалярными произведениями с осями камеры u, v, п:
Pu"iP- eye) и;
Pv = {p-eye)-v; (14.42) P„~(P- eye) п.
Таким способом проецируется каждая точка массива p[i], и для нее вычисляется пара чисел (гр е.). Затем по списку (г(1 с.) определяются наименьшие и наибольшие значения г и с, которые после нахождения записываются в структуру данных проекционного экстента {left, top, right, bottom).
Рис. 14.41. Построение проекционного экстента На рис. 14.42 показана сцена, полученная трассировкой лучей, причем на каждый объект наложен его проекционный экстент. (Некоторым программистам нравится в целях отладки рисовать проекционные экстенты каждого объекта перед тем, как начать трассировку лучей. Во время закраски пикселов окончательными цветами при трассировке лучей эти прямоугольники исчезают.)
Рис. 14.42. Сцена, полученная трассировкой лучей, с видимыми проекционными экстентами