Объекты трехмерной сцены можно обрезать объемом наблюдения, чтобы устранить нежелательные участки сцены. Верх, низ и боковые стороны объема наблюдения формируются плоскостями, которые параллельны линиям проекции и проходят через стороны отсекающего окна. Для создания замкнутого объема наблюдения используются ближняя и дальняя {передняя и задняя) плоскости. При параллельной проекции объем наблюдения является параллелепипедом, при перспективной - усеченной пирамидой. В любом случае объем наблюдения можно преобразовать в нормированный куб, границы которого проходят по каждой оси в точках с координатами 0 и 1 или -1 и 1. Эффективные алгоритмы отсечения обрабатывают объекты сцены ограничивающими плоскостями нормированного объема наблюдения. В графических пакетах отсечение обычно выполняется в четырехмерных однородных координатах с последующим проектированием и нормировкой объема наблюдения. Затем однородные координаты преобразуются в трехмерные декартовы координаты проекции. Чтобы убрать выбранные части сцены или получить спецэффекты, можно использовать дополнительные плоскости отсечения с произвольной ориентацией.

Чтобы задать параметры наблюдения, используется функция трехмерного наблюдения из библиотеки OpenGL Utility (табл. 7.1). Данная библиотека включает функцию для задания симметричной перспективной проекции. Еще три функции наблюдения есть в стандартной библиотеке OpenGL, и с их помощью задается ор-тографическая проекция, произвольная перспективная проекция и дополнительные плоскости отсечения. Резюме по функциям наблюдения OpenGL, рассмотренным в данной главе, приведено в табл. 7.1. Кроме того, в таблице указано несколько родственных функций.

ЛИТЕРАТУРА

Обсуждение алгоритмов трехмерного наблюдения и отсечения можно найти в работах [73, 191, 380, 381]. Алгоритмы отсечения в однородных координатах описаны в публикациях [29, 33-35, 285]. Различные техники программирования трехмерного наблюдения изучаются в сборниках [8, 122, 151, 176, 244].

Полный перечень функций трехмерного наблюдения OpenGL предлагается в справочнике [320]. Примеры программирования в OpenGL с использованием трехмерного наблюдения приводятся в книге [400]. Дополнительные примеры программирования можно найти на Web-сайте Нейта Робинса (Nate Robins): http : / /www. cs .Utah. edu/~narobins/opengl .html.

ТАБЛИЦА 7.1. Резюме по функциям трехмерного наблюдения OpenGL

Функция

Описание

gluLookAt

Задает параметры трехмерного наблюдения

glOrtho

Задает параметры отсекающего окна, а также ближней и дальней плоскостей отсечения для ортогональной проекции

gluPerspective

Задает угол поля обзора и другие параметры симметричной перспективной проекции

glFrustum

Задает параметры отсекающего окна, а также ближней и дальней плоскостей отсечения для перспективной проекции (симметричной или косоугольной)

glClipPlane

Задает параметры дополнительной плоскости отсечения

УПРАЖНЕНИЯ

7.1. Напишите процедуру формирования матрицы, переводящей точки с внешними координатами в трехмерные координаты наблюдения для данных Ро, N и V. Вектор верха может иметь любое направление, не параллельное N.


⇐ вернуться назад | | далее ⇒