3.4. ИЗОБРАЖЕНИЕ ОСНОВНЫХ ПРИМИТИВОВ МЕТОДОМ ТРАССИРОВАНИЯ ЛУЧЕЙАлгоритм синтеза изображений требует конкретного описания правил изображения некоторых стандартных примитивов. К последним можно отнести многоугольники, многогранники, шары и эллипсоиды, параболоиды, цилиндры, конусы; поверхности типа экструзий; бикубические участки. В §3.4.1 - 3.4.4 подробно рассмотрены правила обработки примитивов на основе плоских многоугольников, многогранников, поверхностей второго порядка, бикубических поверхностей. Напомним, что поверхности типа экструзий образуются вращением некоторой ломаной линии вокруг заданной оси или с помощью параллельного переноса ломаной вдоль некоторой прямой. В первом случае поверхность представляют в виде усеченных конусов, соприкасающихся торцами, а во втором – в виде смежно расположенных многоугольников. В этом изложении примитивы такого вида специально не рассматриваются, так как могут быть составлены из независимых комбинационных частей. В [95,74] также могут быть найдены конкретные правила изображения основных примитивов методом трассирования лучей. 3.4.1. ПЛОСКИЕ МНОГОУГОЛЬНИКИОбъект, описываемый только многоугольниками, может быть преобразован в изображение несколькими методами: Робертса, сканирующей строки, прямым, обратным трассированием и др. Самым быстродействующим для таких объектов является метод сканирующей строки. Однако если объект наряду с плоскостями содержит поверхности более высоких порядков и требуется высокое качество изображения, то лучше применять метод трассирования лучей. Этот подход имеет специфические особенности. Пусть некоторый пространственный объект, составленный из сплошных выпуклых объемных примитивов, включает и несколько плоских участков. Рассмотрим такой участок отдельно. В объектной системе плоскость, которой он принадлежит, может быть описана уравнением
или в матричном виде Иногда плоский участок задают тремя точками при условии, что они не принадлежат одной прямой. По этой информации можно восстановить уравнение плоскости (3.4.1) как это показано в программе PL3T (см. приложение). Уравнение (3.4.1) описывает бесконечно простирающуюся плоскость. Реальные плоские детали ограничены замкнутой линией. Рассмотрим наиболее простой с вычислительной позиции случай, когда форма линии – многоугольник. Примерами таких плоских примитивов являются крыло самолета, поверхность стола, обложка книги и т.д. (рис. 3.4.1). Рис. 3.4.1. Крыло самолета – пример плоского примитива Граничные точки такого многоугольника оцифруем однообразно по (или против) часовой стрелке и запишем их координаты в матрицу
где Матрицы параметров уравнения плоскости В соответствии с методом трассирования лучей необходимо найти пересечение прямой с данным примитивом. Координаты такого пересечения находят решением системы где Отдельный световой луч и плоскость могут быть ориентированы друг относительно друга произвольно, поэтому возможны три исхода совместного решения: отсутствие решений, бесконечное множество решений и единственное решение. Решения отсутствуют при параллельности, но не совпадении прямой и плоскости, другими словами, при перпендикулярности вектора нормали
где Физически выполнение этого условия означает невидимость поверхности из данного рецептора Бесконечное множество решений возникает при условии совпадения светового луча и плоскости, то есть, при одновременном выполнении условий параллельности и наличия общей точки:
Так как информация о поверхности, которой луч касается, но не пересекает, остается неопределенной для приемника света, то справедливо интерпретировать последнее условие как невидимость тонкой поверхности. Объединяя условия (3.4.2), (3.4.3) как условия невидимости, можно установить, что прямая не пересекается с плоскостью, если выполняется условие В противном случае решение единственно: где В программах PLOS, DIRECT (см. приложение) приведен пример реализации этого алгоритма на Турбо Паскале. Приведенное решение получено для бесконечной плоскости. Так как плоский участок объекта ограничен выпуклым многоугольником, то полученное ранее единственное решение необходимо оценить на принадлежность внутренней области этого многоугольника. В объектной системе координат уже заданы координаты крайних точек в виде матрицы
Рис. 3.4.2. Проецирование многоугольника на координатную плоскость Из проективной геометрии [51] известно, что если точка Известно [39], что прямая
Для Рис. 3.4.3. Участок выпуклого многоугольника Напомним, что для определения факта принадлежности точки пересечения Для остальных Распространение "опыта" первой прямой на все остальные оправдано, так как может быть достаточно просто доказано следующее положение. Если задан замкнутый плоский выпуклый контур из Введем знак Приведем доказательство. Рассмотрим участок выпуклого замкнутого многоугольника. Этот участок состоит из трех последовательных отрезков (ребер) под номерами
Рис. 3.4.4. Определение факта освещенности или затененности плоскостей Аналогично
Докажем сначала, что точка
В соответствии со значением Распространяя по аналогии полученные выводы для любой другой тройки последовательных отрезков, убеждаемся в справедливости приведенного выше положения. Оно может быть сформулировано в другой форме: знак внутренней области замкнутой зоны, заданной в однозначной последовательности нумерации вершин (все по или против часовой стрелки), определяется знаком функции, описывающей любое ребро зоны. Процедура AVTOZON (см. приложение) реализует достижение положительности значения внутренней области сразу для нескольких выпуклых многоугольников путем оценки знака функции, описывающей первое по порядку ребро внутри многоугольника. Обработка многих многоугольников в одной процедуре связана с тем, что обычно в сцене присутствуют несколько плоских участков с одинаковым числом ребер. После такого преобразования факт принадлежности точки
Соответственно точка лежит вне фигуры, если найдется хотя бы одна такая Приведенные рассуждения справедливы для случая проецирования плоского примитива на плоскость
В более компактном виде указывают двумерную матрицу Пользоваться двухмерным представлением информации о координатах крайних точек многоугольника достаточно удобно, так как обычно ввод исходных данных производится с чертежа в трех видах, совпадающих с плоскостями Таким образом, при любой ориентации светового луча и многоугольника удается определить факт их пересечения. В программах KRILO, YNZONA (см. приложение) показаны примеры реализации изложенных принципов пересечения прямой и многоугольника на Турбо Паскале. Подпрограмма YNZONA использует в качестве входных параметров матрицу проекций направляющих векторов-ребер, которая формируется путем предварительного обращения к процедуре AVTOZON (см. приложение). Для вычисления освещенности в видимой точке необходимо знать направление и ориентацию нормального вектора к плоскости. Известно, что нормальный вектор к плоскости записывается в виде Плоскость В процессе конструирования объектов и получения изображений возникает необходимость пространственного перемещения частей объекта, в том числе и плоских многоугольников. Перемещение многоугольника в пространстве означает изменение координат его крайних точек и коэффициентов уравнения плоскости. Пусть в системе
которая образуется путем присоединения к матрице
а для любой плоскости, издаваемой в указанных координатных системах соответственно матрицами
Матрица
где Рис. 3.4.5. Пример взаимного положения систем координат При перемещении многоугольника происходит изменение коэффициентов уравнения плоскости и принципиально возможно неуправляемое изменение ориентации нормали, что может привести к грубым ошибкам при вычислении освещенности в тонах. На самом деле этого не происходит, что может быть доказано следующим образом. Покажем, что если в системе координат Действительно, ранее было показано, что справедливы выражения:
Из условия доказываемого положения следует, что произведение
|