OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 28
Текст из файла (страница 28)
Бели не заданы другие преобразования, направление проецирования параллельно осн д а наблюдатель смотрит в отрицательном направлении оси ж Для особых случаев проецирования двухмерных изображений на двухмерный экран используется функция СШ к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 з(ге( Ье(яЬ(); Определяет прямоугольник пикселов, в котором показывается изображение. Аргументы (х, у) задают левый нижний угол окна просмотра, а ю(гг(Ь и ЬегяЬР устанавливают его размер. По умолчанию начальными значениями окна про- смотра являются (О, О, тп Игк(ЬР, гя(пНегйЬР), где Ып ЮЫЬР и Рог пНеРйЬ( — разме- ры экранного окна. Ф Фф Недеформированное Деформированное Рнс. 3.12.
Отображение видимого объема в окно просмотра На рис. 3.17 для левой части проецирование квадратного изображения на квад- ратное окно просмотра было произведено следующим набором команд; 41чРеглрест(че((ачу, 1.9, пеаг, Раг); 4Ш(енрог(9, О, 400, 409); Алла правой части окно приведено к неравносторонней прялюугольной области просмотра, но проекция осталась неизменной. Изображение получается сжатым яо оси х: 11еРегерест гче (Речу, 1. 9, пеаг, Раг); е1у~енрогт(9, О, 400, 200); Для устранения несоответствия нужно принести аспектное отношение в соответ- ствие с областью просмотра; 41чРегересс(че((очу, 2.0, пеаг, (аг); 4(Ч(енрогс(9.
О, 499, 2ОО); Асвектное отношение (ширины к высоте) для окна просмотра обычно совпадает с таковым для видимого объема. Иначе проецируемое в окно просмотра изображение будет деформировано (рис. 3.17). Помните, что последующие изменения римера экранного окна сами собой не затрагивают область просмотра. Приложение должно реагировать на эти изменения, соответственно подстраивая окно просмотра. 126 Глава 3 е Визуализация Упражнение Измените приведенную программу таким образом, чтобы объект рисовался дважды, в разных окнах просмотра.
Можете нарисовать объект с различными преобразованиями проецирования и/или вида для каждого окна просмотра. Чтобы создать два смежных окна просмотра, используйте команды, приведенные ниже, вместе с соответствующими командами модельно-видовых преобразований и преобразований проекции: в(Ч1енрог((0. О, змеек/2, з)веу); Х)Ч)енроге(з!тех/2, О. з1зех/2, зътеу); Измененная координата глубины Координата глубины (г) преобразуется при вписывании в окно просмотра (и после этого сохраняется в буфере глубины). Ее значение можно масштабировать для того, чтобы опо попало в требуемый диапазон, с помощью функции к(Пер СП- калке (). (Буфер глубины и использование координаты глубины обсуждаются в главе 10.) В отличие от оконных координат х и у, оконная координата г, которой оперирует ОрепС1, всегда принимает значения в диапазоне от 0.0 до 1.0.
чоЫ 810ертвяапбе(СЕс!ап)рс( пеаг, СЕс!а)пр(( уаг); Определяет преобразование для координаты д происходящее во время отображения на окно просмотра. Аргументы пеаг и /аг представляют минимальное и максимальное значения, которые могут быть сохранены в буфере глубины. По умолчанию они равны, соответственно, 0.0 и 1.0. Эти значения принудительно ограничиваются интервалом (О, 1]. В перспективной проекции измененная координата глубины (как и координаты х и у) подвергается перспективному делению по координате вс Чем дальше измененная координата глубины от ближней плоскости отсечения, тем менее точно ее местоположение (рис.
3.18). Ьхмхх „оооо охво ,Еов Рис. 3.28. Перспективная проекция и изменение координат глубины Проблемы преобразований 127 Таким образом, перспективное деление влияет на точность операций, которые опираются на измененную координату глубины, и особенно на буферизацию по глубине, используемую для удаления невидимых поверхностей. Проблемы преобразований Фотографу несложно ориентировать камеру в правильном направлении, но в компьютерной графике положение и направление выражаются через углы и ко- ординаты. Не составляет труда, и мы можем зто засвидетельствовать, получить известный эффект черного экрана. Хотя есть множество других причин для ошибки, чаще всего этот эффект, то есть отсутствие чего бы то ни было на экране, проистекает из-за неправильного позиционирования «камеры», когда модель вы- яадает из поля зрения. Похожая проблема имеет место, если не выбрано поле зре- вяя, являющееся достаточно широким, чтобы увидеть объекты целиком, и доста- точно узким, чтобы объекты были визуально различимы.
Если настойчивость черного экрана превосходит все ваши усилия, попробуйте решить проблему с помощью следуюгпих действий: 1. Проверьте очевидные вещи. Удостоверьтесь, включена лн ваша система. На всякий случай взгляните, не рисуете ли вы цветом, совпадающим с цветом очистки экрана. Проверьте, правильно ли включены/выключены все нужные режимы (такие как освещение, текстурирование, альфа-смешивание, логические операции или устранение ступенчатости), 3. Помните, что в командах проецирования координаты ближней и дальней плоскостей означают расстояние от точки наблюдения и (по умолчанию) линия взгляда направлена вдоль оси г.
Таким образом, если расстояние до ближней плоскости равно 1.0, а до далъней — З.О, координаты г видимых объектов должны быть в интервале от — 1.0 до — 3.0. Для того чтобы убедиться, что вы не отсекаете все объекты в сцене, временно установите отступы для ближней и дальней плоскостей отсечения в какие-либо не имеющие смысла значения, например 0.001 и 1 000 000.0. Это изменит результат таких операций, как буферизация по глубине и туман, но позволит отобразить непреднамеренно отсеченные объекты. 3. Оцените, где находится точка обзора, в каком направлении вы смотрите и где располагаются объекты.
Так проще получить реальное трехмерное пространство — используйте, например, руки, чтобы вообразить этн вещи. 1. Убедитесь, что вы знаете, вокруг чего вращаетесь. Вы можете считать, что вы поворачиваетесь вокруг произвольной точки, хотя вернулись назад к началу координат. Кружение вокруг любой точки — это нормально, но только если не ожидать такого поворота событий. 5.