М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 27
Текст из файла (страница 27)
Усеченная пирамида получает задаваемую по умолчанию ориентацию в трехмерном пространстве. Матрица проекций дает возможность выполнить некоторый поворот или перенос для изменения этой ориентации, но это сложно, и почти всегда можно без такого обойтись. Преобразования проецирования 121 Рис. 3,13. Определение объема видимости с помощью функции д)Ршвшю() ПРИМЕЧАНИЕ Усеченная пирамида не обязана быть симметричной, и ее ось не обязательно должна быть параллельна оси т. Например, д)Ргцэюгп0 сработает и для рисования изображения, получаемого при взгляде в прямоугольное окно, когда окно располагается выше, левее наблюдателя или под углом к нему. В фотосьемке такой ракурс применяется для получения необычной (двухточечной) перспективы.
Также эта функция помогает получить изображения с разрешением выше нормального экранного, например для распечатки. Допустим, нужно нарисовать изображение с разрешением в два раза большим, чем разрешение экрана. Тогда разрежем основание видимого объема на четыре части, используя усеченную пирамиду, которая заполняет весь экран одной четвертой частью иэображения, и выполним четыре рисования. Пиксельные данные каждого квадранта формируют соответствующую часть изображения высокого разрешения, собираемого в конечном итоге. (Ом, главу 8 для получения информации о чтении пиксельных данных.) Хотя, в общем, функция к1Р го зтцж () умозрительно понимаема, она не является понятной на интуитивном уровне.
Есть аналогичная по целям функция СШ к1црегзресс)че(), которая создает тот же объем видимости, что п функция х1Ргцзсцм0, но другим способом. Вместо определения углов ближней плоскости отсечения берутся угол поля зрения (0), как показано на рис. 3.14, в направлении у, в отношение ширины к высоте (хггу). (ясно, для квадратной части экрана отношение сторон равно 1.0.) Этих лвух параметров достаточно для задания неусеченной ннрамилы, ориентированной вдоль линии взгляда, как показано на рнс. 3.1гь уоЫ к)црегзресс1уе(С(х)оцЫеуоюу, С)к)оцЫе азресд С(х)оцЫе пеаг, С)х)оцЫе )ог); Создает матрицу для симметричной усеченной пирамиды и умножает на нее текущую матрицу.
Значение аргумента /ору — угол поля зрения в плоскости уд Его значение лежит в диапазоне [0.0, 180.0]. Аргумент аятесг определяет соотношение сторон усеченной пирамиды — ширины к высоте. Аргументы пеаг иуагуказывают расстояние между точкой наблюдения и плоскостями отсечения по оси г. Их значения всегда положительны. Усекается пирамида заданием расстояния между точкой наблюдения и ближней идальней плоскостями отсечения. Функция к1црегзрест1уе() умеет создавать 122 Глава 3 ° Визуализация только усеченные пирамиды, симметричные относительно осей х и у, ориентированные по линии взгляда, но обычно этого достаточно.
Рмс. 3.14. Определение объема видимости с помощью функции вмРегвресбуе() Так же, как и в случае с я1Егцэтцв(), здесь допустимо изменить ориентацию объема видимости по умолчанию, с помошью вращения или переноса. По умолчанию наблюдатель считается помещенным в начало координат, а линия взгляда — направленной вдоль отрицательной оси г. При использовании функции я1цРегврест1уе() нужно задать правильные значения для поля зрения, иначе изображение будет искажено. Чтобы выяснить, какие значении поля зрения правильны, ответьте на вопрос: как далеко обычно глаз располагается от экрана и насколько велико окно? Затем вычислите угол, соответствуюший таким размерам и такому расстоянию.
Наверняка он меньше, чем можно было предположить. Для сравнения: 94-градусное поле зрения с 35-миллиметровой камерой требуют 20-миллиметровых линз, которые являются широкоугольнымп. (См. раздел «Проблемы преобразованияь этой главы.) Конечно, ОрепСь все равно, дюймы это или миллиметры. Проецирование и другие преобразования, по сути, безразмерны. Если вам нравится думать, что ближняя и дальняя плоскости отсечения располагаются на расстоянии 1.0 и 20.0 метров, дюймов, километров или парсеков — это ваше право. Главное — использовать одинаковые единицы измерения.
Тогда конечное изображение будет с правильными пропорциями. Ортогональное проецирование При ортогональном (прямоугольном) проецировании объем видимости представляет собой прямоугольный параллелепипед, или коробку (рис. 3.15). В отличие от перспективного проецирования размер объема видимости не изменяется от одного конца к другому, н расстояние от камеры не влияет на размер объектов.
Этот тип проецирования применяется в архитектурных чертежных приложениях и системах автоматизированного проектирования, где необходимо знать реальные размеры объектов и углы между ними. Преобразования проецирования 123 юр (аг К точке просмотра Рис. 3.1Б. Ортогонапьный объем видимости команда К10 г с по () создает ортогональный параллельный объем видимости. так же, как и в функции к1р го этиа(), задаются углы ближней плоскости отсечения и расстояние до дальней плоскости отсечения.
чоЫ К10гтпо(С(.г(опЫе 1еД СМопЫе пдйг, СИопЫе Ьоггоя, С) ОопЫе гор, СМоиЫе пеап С1.бопЫе)'аг); Создает матрицу для ортогонального объема видимости и умножает на нее текущую матрицу. Аргументы (1е)д Ьоггот, -пеаг) и (ттдЬА (ор, -пеаг) определяют точки на ближней плоскости отсечения, соответствующие левому нижнему и правому верхнему углам окна просмотра.
Аргументы (1еД Ьог(от, -)аг) и (щ60 Го)т, -/аг) определяют точки на дальней плоскости отсечения, которые соответствуют тем же проецируемым углам окна просмотра. Аргументы пеаг и )аг могут быть положительными, отрицательными и равными пулю, но не одними и теми же. Бели не заданы другие преобразования, направление проецирования параллельно осн д а наблюдатель смотрит в отрицательном направлении оси ж Для особых случаев проецирования двухмерных изображений на двухмерный экран используется функция СШ к1обгтво20О.
Она идентична своей трехмерной версии, за тем исключением, что все координаты г объектов на экране считаются лежащими в диапазоне от -1.0 до 1.0. Если для построения двухмерных сбьектов использовались двухмерные функции определения вершин, все коордииаты т равны нулю.
Таким образом, никакие объекты не будут отсечены. чек) к1оОг гпо20(СИопЫе (е)г, С1.допЫе пяйд С).с)опЫе Ьог(от, СИопЫе гор); Создает матрицу для проецирования двухмерных координат на экран и умножает на нее текущую матрицу. Отсекающей областью является прямоугольник с левым нижним углом в точке ((е)д Ьоггот) и правым верхним углом в точке (пдйд гор). 124 Глава 3 ° Визуализация Пособие по проецированию от Нэйта Робинса Если у вас есть набор программ Нзйта Робинса, запустите снова пособие по проецированию. На этот раз поэкспериментируйте с аргументами функций я1ирегзрест! уе(), к10гтво() и а1р1озтоа(), Отсечение объемом видимости После того как все вершины сцены изменены модельно-видовой матрицей и матрпцей проекций, каждый примитив, находящийся вне объема видимости, отсека- ется.
)еометрня видимого объема определяется шестью плоскостями отсечения. Вместе с тем можно определять дополнительные плоскости отсечения и располагать пх где угодно. (См. раздел «Дополнительные плоскости отсечения».) Запомните, что ОрепСЕ перестраивает углы многоугольников, попадающих под отсечение. Преобразование окна просмотра Вернувшись к впало~ни с фотокамерой, напомним, что преобразование окна просмотра (у)етурогг) соответствует этапу выбора размера фотографии. Вы хотите сделать стандартную альбомную фотографию илн большой плакат? Так как мы имеем дело с компьютерной графикой, окно просмотра — это прямоугольная область окна, в,которой рисуется изображение.
На рис. 3.16 показано окно просмотра, занимающее собой весь экран. Окно просмотра указывается в координатах, которые отражают позицию пикселов на экране, относительно левого нижнего угла окна. Напомним, что к атому моменту все вершины уже прошли модельновидовые преобразования н преобразования проекции, а те, что оказались за границами видимого объема, отсечены. Рис. 3.16. Прямоугольное окно просмотра Определение окна просмотра Оконная система, а не Орепо)., отвечает за открытие окна на экране.
Однако по умолчанию окно просмотра подразумевает соответствие размерам экранного окна. Функция В1Ч1енрогт() может быль использована для выбора меньшей области рисования. Например, так можно получить эффект «картинка в картинке» или отображения одновременно нескольких различных видов в одном окне. Преобразование окна просмотра 125 чо((1 9\)у(енрогт(С1(пг х, Сйпт у, С з(зе( югс(ГЬ, С1 з(ге( Ье(яЬ(); Определяет прямоугольник пикселов, в котором показывается изображение. Аргументы (х, у) задают левый нижний угол окна просмотра, а ю(гг(Ь и ЬегяЬР устанавливают его размер.