
ALL
.pdf
НОРМИРОВАННЫЕ КООРДИНАТЫ ПЕРСПЕКТИВНОЙ ПРОЕКЦИИ
•Рис. 7.53. Преобразование нормировки из преобразованного объема наблюдения перспективной проекции (прямоугольный параллелепипед) в симметричный нормированный куб, определенный в левосторонней системе координат. Ближняя плоскость отсечения используется как плоскость наблюдения, а центр проекции расположен в начале координат системы наблюдения
Для нормировки этого перспективного преобразования требуется, чтобы координаты проекции были равны (xp; yp; zp) = (-1;-1;-1) при входных координатах (x; y; z) = (xwmin; ywmin; znear), также необходимо, чтобы координаты проекции точки были (xp; yp; zp) = (1; 1;
1) при входных координатах (x; y; z) = (xwmax; ywmax; zfar).

ПРЕОБРАЗОВАНИЯ ПОЛЯ ПРОСМОТРА И ТРЕХМЕРНЫЕ ЭКРАННЫЕ КООРДИНАТЫ
•После того как преобразование в нормированные координаты будет завершено, к симметричному кубу (или единичному кубу) можно эффективно применить отсечение. Завершив процедуры отсечения, содержимое нормированного объема наблюдения можно перевести в экранные координаты. Для координат x и y в нормированном окне отсечения эта операция не отличается от двухмерного преобразования поля просмотра, описанного в разделе 6.3. Однако точки трехмерного объема наблюдения также имеют глубину (координату z), и эту информацию о глубине нужно сохранить для проверок видимости и алгоритмов визуализации поверхностей. В связи с этим преобразование поля просмотра можно рассматривать как отображение в трехмерные экранные координаты.
•Уравнения преобразования координат x и y при переходе от нормированного отсекающего окна в прямоугольное поле просмотра записываются по матрице (6.10).
•Данную матрицу можно использовать в трехмерных приложениях, включив в нее параметры, отвечающие за преобразование значений z в экранные координаты. Часто нормированные значения z, принадлежащие симметричному кубу, перенормируются в диапазон от 0 до 1. Это позволяет соотнести z = 0 с плоскостью экрана и обработку значений глубин выполнить в единичном интервале от 0 до 1. Если включить эту перенормировку по z, преобразование из нормированного объема наблюдения в трехмерные экранные координаты запишется так:
ПРЕОБРАЗОВАНИЯ ПОЛЯ ПРОСМОТРА И ТРЕХМЕРНЫЕ ЭКРАННЫЕ КООРДИНАТЫ
•В нормированных координатах грань симметричного куба znorm = ..1 соответствует области отсекающего окна. Также эта грань нормированного куба отображается в прямоугольное поле просмотра, которое теперь определяется уравнением zscreen = 0. Таким образом, левый нижний угол области экрана, соответствующей полю просмотра, расположен в точке (xvmin; yvmin; 0), а правый верхний угол в точке (xvmax; yvmax; 0).
•Каждая точка xy в поле просмотра соответствует позиции в буфере регенерации, который содержит информацию о цвете этой точки на экране. Кроме того, в другой области буфера, именуемой буфером глубины, содержится информация о глубинах всех точек экрана. В последующих главах будут рассмотрены алгоритмы определения точек видимых поверхностей и их цветов.
•Прямоугольное поле просмотра располагается на экране точно так, как и в двухмерных приложениях. Левый нижний угол поля просмотра обычно размещается в точке, заданной относительно левого нижнего угла окна на экране. Кроме того, чтобы сохранить пропорции объекта, характеристическое отношение области поля просмотра задается таким же, как для отсекающего окна.
ТРЕХМЕРНЫЕ АЛГОРИТМЫ ОТСЕЧЕНИЯ
•В главе 6 обсуждались преимущества использования нормированных границ отсекающего окна в двухмерных алгоритмах отсечения. Подобным образом трехмерные алгоритмы отсечения можно применить к нормированным границам объема наблюдения. Это позволяет крайне эффективно реализовать конвейер проектирования и процедуры отсечения. Все аппаратно-независимые преобразования (геометрические и проектирования) сворачиваются и применяются до выполнения процедур отсечения.
•В трехмерном случае каждая граница отсечения нормированного объема наблюдения представляет собой плоскость, параллельную одной из декартовых плоскостей, вне зависимости от типа проекции и исходной формы объема наблюдения. В зависимости от того, нормирован объем наблюдения в единичный куб или в симметричный куб со стороной 2, плоскости отсечения проходят через точки с координатами 0 и 1 или -1 и 1. Для симметричного куба уравнения трехмерных плоскостей отсечения записываются так:
•xwmin = ..1; xwmax = 1;
•ywmin = ..1; ywmax = 1; (7.43)
•zwmin = ..1; zwmax = 1:
•Границы отсечения по x и y это нормированные границы отсекающего окна, а границы отсечения по z это нормированные положения ближней и дальней плоскостей отсечения.
•В алгоритме отсечения для трехмерного наблюдения определяются и записываются все участки объектов, попадающие в нормированный объем наблюдения, для отображения на устройстве вывода. Все части объектов, расположенные вне плоскостей отсечения объема наблюдения, удаляются. Отметим, что алгоритмы трехмерного отсечения являются расширением двухмерных методов, в которых вместо линейных границ нормированного отсекающего окна используются нормированные граничные плоскости объема наблюдения.

ОТСЕЧЕНИЕ В ТРЕХМЕРНЫХ ОДНОРОДНЫХ КООРДИНАТАХ
•Графические библиотеки обрабатывают пространственные точки в четырехмерных однородных координатах, поэтому все преобразования можно представить матрицами 4 на 4. При поступлении каждой точки на конвейер наблюдения она преобразуется в четырехмерное представление:
•(x; y; z) (x; y; z; 1):
•После того как точка прошла геометрические преобразования, преобразования наблюдения и проектирования, она записывается в такой однородной форме:
•где матрица M представляет свертку всех различных преобразований из внешних координат в нормированные, однородные координаты проекции, причем однородный параметр h уже может быть не равным 1. Фактически h может иметь любое действительное значение в зависимости от того, как представлены объекты сцены, и какой тип проекции используется.
Рис. 7.56. Возможное упорядочение границ отсечения объема наблюдения, соответствующих разрядам кода области
ОТСЕЧЕНИЕ В ТРЕХМЕРНЫХ ОДНОРОДНЫХ КООРДИНАТАХ
•Если однородный параметр h равен 1, однородные координаты аналогичны декартовым координатам проекции. Такая ситуация часто возникает при параллельном проектировании. Однако перспективная проекция дает однородный параметр, который является функцией координаты z любой точки пространства. Однородный параметр перспективной проекции может даже быть отрицательным. Так бывает, когда точки располагаются за центром проекции. Кроме того, представления поверхностей объектов рациональными сплайнами часто формулируются в однородных координатах, где однородный параметр может быть положительным или отрицательным.
•Следовательно, если отсечение выполняется в координатах проекции после деления на однородный параметр h, некоторая координатная информация может теряться, и объекты не будут отсекаться корректно.
•Чтобы эффективно обрабатывать все возможные проекционные преобразования и представления объектов, следует применить процедуры отсечения к представлению точек пространства в однородных координатах. Кроме того, поскольку все объемы наблюдения можно преобразовать в нормированный куб, на аппаратном уровне можно реализовать единственную процедуру отсечения, обрабатывающую объекты в однородных координатах нормированными плоскостями отсечения.
ТРЕХМЕРНЫЕ КОДЫ ОБЛАСТЕЙ
•Расширим концепцию кода области (раздел 6.7) на три измерения, просто введя пару дополнительных разрядов для учета ближней и дальней плоскостей отсечения. Таким образом, теперь будет использоваться шестиразрядный код области, как показано на рис. 7.56. Разряды в этом примере нумеруются справа налево и соответствуют левой, правой, нижней, верхней, ближней и дальней плоскостям отсечения (в таком порядке).
•Условия для выбора значений разрядов по сути те же, что описаны в разделе 6.7, только добавляется два новых условия для ближней и дальней отсекающих плоскостей. Для трехмерной сцены, однако, процедуры отсечения нужно применять к координатам проекции, которые преобразованы в нормированное пространство. После проектирования каждая точка сцены представляется четырьмя компонентами P = (xh; yh; zh; h). Если отсечение выполняется по границам нормированного симметричного куба (уравнения (7.43)), точка будет находиться внутри этого норми рованного объема наблюдения при условии, что координаты проекции точки удовлетворяют следующим шести неравенствам:
•.-1 xh/h 1; - 1 yh/h 1; ..-1 zh/ h 1:
•Если все сделано без ошибок, значение однородного параметра h не равно нулю. Перед реализацией процедур, в которых фигурируют коды областей, можно проверить, не имеет ли однородный параметр нулевое или просто очень маленькое значение. Кроме того, однородный параметр может быть положительным или отрицательным.
ТРЕХМЕРНЫЕ КОДЫ ОБЛАСТЕЙ
•Следовательно, предполагая, что h 0, предыдущие неравенства можно записать в такой форме:
•-h xh h; -h yh h; -h zh h если h > 0;
•h xh -h; h yh -h; h zh -h если h < 0:
•В большинстве случаев h > 0, и тогда с точками можно следующим образом сопоставлять значения разрядов в коде области:
•бит 1 = 1; если h + xh < 0 (левая);
•бит 2 = 1; если h .. xh < 0 (правая);
•бит 3 = 1; если h + yh < 0 (нижняя);
•бит 4 = 1; если h .. yh < 0 (верхняя);
•бит 5 = 1; если h + zh < 0 (ближняя);
•бит 6 = 1; если h .. zh < 0 (дальняя):
•Данные значения можно определить, используя тот же подход, что и при двухмерном отсечении. Следовательно, просто находится бит знака одного из выражений hxh, hyh или hzh, и на его основе устанавливается соответствующее значение разряда кода области. На рис. 7.57 указаны все 27 кодов области для объема наблюдения.
•В тех случаях, когда для некоторой точки h < 0, отсечение можно выполнять, используя второй набор неравенств из уравнения (7.46), или же можно инвертировать координаты и провести отсечение с помощью проверок для h > 0.

ТРЕХМЕРНОЕ ОТСЕЧЕНИЕ ТОЧЕК И ЛИНИЙ
•Для обычных точек и отрезков, определенных на сцене, которая не лежит позади центра проекции, все однородные параметры положительны, и коды областей можно установить, используя условия (7.47). Затем, определив для каждой точки на сцене код области, можно легко найти положения точек, входящих или не входящих в объем наблюдения. Например, код области 101000 сообщает, что точка находится над объемом наблюдения и позади него, а код области 000000 указывает на внутреннюю точку объема (рис. 7.57). Следовательно, при отсечении точек просто удаляются те точки, код области которых не равен 000000. Другими словами, если любая из проверок (7.47) дает отрицательный результат, точка находится вне объема наблюдения.
а) коды области перед ближней плоскостью б) коды области между ближней и дальней плоскостью в) коды области за дальней плоскостью
Рис. 7.57. Значения трехмерного шестиразрядного кода области, дентифицирующие пространственные положения относительно границ объема наблюдения

ТРЕХМЕРНОЕ ОТСЕЧЕНИЕ ТОЧЕК И ЛИНИЙ
•Методы трехмерного отсечения линий, по сути, не отличаются от методов отсечения двухмерных линий. Вначале можно проверить коды области конечных точек на предмет тривиального принятия или отбрасывания линии целиком. Если код области обеих конечных точек линии равен 000000, линия полностью находится внутри объема наблюдения. Аналогично линию можно тривиально принять, если применение операции логического ИЛИ к кодам области двух конечных точек дает 0. Также можно тривиально отбросить линию, если применение операции логического И к двум кодам конечных точек дает ненулевое значение. Данное значение указывает, что оба кода имеют значение 1 в одном разряде, следовательно, линия полностью лежит вне одной плоскости отсечения. Чтобы проиллюстрировать сказанное, обратимся к рис. 7.58, где отрезок от P3 до P4 характеризуется кодами 010101 и 100110. Видно, что данная линия полностью находится под нижней плоскостью отсечения.
Рис. 7.58. Трехмерные коды области для двух отрезков. Линия P1P2 пересекает правую и верхнюю границы отсечения, а линия P3P4 целиком находится под нижней плоскостью отсечения