3.3.2. ПЕРЕСЕЧЕНИЯ СВЕТОВОГО ЛУЧА С КОМБИНАЦИЕЙ ПРИМИТИВОВ
После того как задача определения точек пересечений решена для всех примитивов, входящих в состав объекта, необходимо выделить среди всей этой совокупности точку, ближайшую к наблюдателю, т.е. видимую. Однако формально ближайшая точка может не принадлежать поверхности объекта, как это бывает, например, для ближних к наблюдателю вычитающихся примитивов.
Для каждого
-го примитива ранее были составлены матрицы:
– координат пересечения луча с примитивом и матрица
– указателей номеров поверхностей внутри примитива, которым принадлежат соответствующие точки пересечения из
. Сведем все
матриц
и
матриц
соответственно в общие для всего объекта блочные матрицы
и
. Матрица
представляет собой матрицу-столбец, первый элемент которой есть матрица
,
-й –
, а последний –
. Матрица
имеет следующую структуру:
.
В общем случае размерность матрицы
составляет
, матрицы
–
. В каждой строке
первое число указывает номер поверхности, второе – номер примитива для точки, координаты которой помещены в одноименной строке
.
Переформируем
так, чтобы в первой ее строке помещалась ближайшая к источнику луча точка, остальные же точки могут произвольно располагаться на более низких позициях. Соответственно и в том же порядке переставим строки матрицы
, получим новую матрицу
. Это необходимо для того, чтобы не потерять связь между точкой и конкретной поверхностью.
Теперь после выделения ближайшей точки
следует убедиться в том, что она принадлежит поверхности объекта. Для этого необходимо оценить положение точки по отношению к каждому примитиву, входящему в состав объекта, а затем, пользуясь формальными правилами (табл. 3.2.1), установить относительное положение точки и объекта. Положение точки и каждого примитива
определяется функцией принадлежности
, вычисляемой в соответствии с правилами §3.2.4. Положение точки
и объекта
устанавливают путем попарной подстановки значений
,
, в формализованное описание (3.2.2) и (3.2.3) для объекта. Преобразования значений функции принадлежности над парами примитивов приведены в табл. 3.2.1.
Например, пусть объект
составлен из примитивов
(рис. 3.3.1). Световой луч пересекает эту комбинацию в точках 1-6. Ближайшей к источнику луча будет точка 1. Функции принадлежности этой точки и примитивов принимают значения
;
;
; тогда
,
. Таким образом, точка 1, будучи ближайшей к источнику луча, не является видимой, так как находится вне объекта.

Рис. 3.3.1. Пересечение светового луча со сложной комбинацией примитивов
В случае, если ближайшая точка не лежит на поверхности объекта, как это случилось в приведенном примере, ее следует устранить из дальнейшего анализа, а среди оставшихся точек-пересечений вновь выделить ближайшую и вновь проверить ее на принадлежность объекту. Этот процесс следует продолжать либо до исчерпания всех точек, либо до нахождения как очередной ближайшей, так и одновременно принадлежащей объекту точки. В первом случае констатируется факт непересечения луча и объекта, во втором – осуществляется определение координат видимой точки
.
Так как одновременно с каждым переформированием
однотипно переформировывалась
, то номера поверхности и примитива для видимой точки прочитываются соответственно из первого и второго столбца первой строки
.
В описанной процедуре используется алгоритм поиска ближайшей
точки к некоторой другой точке
среди множества точек
,
, которые все принадлежат одной прямой – световому лучу.
В том случае, если объект и прямая заданы в объектной системе координат, то наиболее общим критерием ближайшей точки является следующий:
. В частных прикладных задачах критерий может быть упрощен до следующего вида:
:
, или
:
, или
:
.
Применение последних трех правил оправдано только в том случае, когда априорно известна непараллельность любого светового луча плоскостям
. Так, например, целесообразно использование последнего критерия при моделировании аэросъемки. В этом случае ни один трассирующий луч не параллелен плоскости Земли
на пути камера – объект и Солнце – объект.
В случае, когда объект и приемник света заданы в экранной системе координат, наиболее пригодным является следующий хорошо известный подход:
.
Таким образом, формальными методами возможно определение точек пересечения светового луча с любой пространственной комбинацией примитивов. Определение ближайшей (видимой) точки может достигаться с использованием различных критериев, выбор которых зависит от смысла прикладной задачи.