
Рис. 5.3.1. Объект, его собственная и теневая оболочки (а), изображение объекта и его оболочек на экране (б)
Спроецируем точки матрицы С на экран. Для этого сначала пересчитаем их координаты из объектной в экранную систему:
С'=СМ, где С — матрица размером 2Их4 элементов, представляющая запись координат точек из области в экраннойсистеме координат; М — матрица преобразования размером 4x4 элемента [19, 21]. Затем определим перспективные координаты в плоскости экрана для всех точек из матрицы С': х. = АС (і,1)/ / [Г-С'(і,3)]; ус = Ю'(і,2)/[Г-С'(і,3)1, где і — фокусное расстояние
С снаблюдательной системы; х!г,у. — координаты изображения уйточки матрицы С, і=1(1)21Ч. Здесь предполагается, что центр проекции лежит между экраном и объектом.
Полученные значения координат изображения точек из матрицы С запишем в виде

где А "включает координаты изображений точек выпуклой оболочки А, С"- С*.
Так как теневая трехмерная оболочка С* уверенно охватывает целиком область тени объекта, то двухмерная выпуклая оболочка
0, построенная вокруг изображений С "крайних точек оболочки С*, надежно охватывает изображения тени от данного объекта. Аналогично можно определить область положения на изображении самого тела объекта путем построения выпуклой двухмерной оболочки <5 вокруг точек множества из А". На рис. 5.3.1,6 показано изображение объекта и оболочек на экране. Крайние точки двухмерной оболочки <5: Е',К',С,Б',С,В'. Крайние точкидвухмерной оболочки 9: М',1/,Е',К',0',0',С',1Г. Штрихи в обозначениях указывают, что речь идет о изображении приведенной точки, т. е. Е' есть изображение Е. Способ построения выпуклой оболочки вокруг множества точек на плоскости известен [17,64,81,126,127]. Так, если Л — оператор, выбирающий из множества точек на плоскости крайние точки выпуклой оболочки, то9=Д(С"), (3 = Д(А").
На этапе построения самого изображения, прежде чем производить трассирование луча из каждого рецептора, последний оценивается на принадлежность внутренней области оболочек (2 и 9.
т
Если рецептор находится снаружи оболочки (}, то он не "видит" тело объекта, и если рецептор находится снаружи оболочки q, то он не принадлежит области тени отданного объекта. Оценивание пересечения трассирующего луча с примитивом производится только в случае принадлежности рецептора внутренней области оболочки (2, а оценивание затененности точки, видимой из рецептора, производится только в случае попадания рецептора во внутреннюю область оболочки 8. В приложении даны описания подпрограмм АУТ020>1, УК20МА, позволяющих оценивать принадлежность текущего рецептора областям (3 и 8.
Использование описанного подхода для иерархии примитивов избавляет от слепого поиска и анализа точек пересечения трассирующего луча с заведомо невидимыми примитивами и комбинациями примитивов и сокращает время вычислений в несколько раз. При этом эффект от использования оболочек становится тем ощутимее, чем больше примитивов в составе объекта и сложнее их конструкция.
Заметим, что при вычислении матрицы С удобно использовать аналитически полученное значение матрицы М преобразования координат из объектной системы в экранную: