OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 22
Текст из файла (страница 22)
Для нахождения более общего решения проблемы разбиения рассмотрим произ- вольную поверхность, определяелгую двумя параметрами, и]0] и и]1]. Допустим, имеется две функции: чгд б авгс(61(1оа! в[2], 6сг!Оаг чегсех(3], 6сг!Оа! погаэ![3]); (1оаг свГЧ(6ьг!оа! О[2]); При передаче и]] в качестве аргумента функции за г Г () возвращается соответствующая трехмерная вершина и вектор нормали (длиной 1). Если и~] передается функции с вгч(), вычисляется и возвращается кривизна поверхности в данной точке. (См. учебник по дифференциальной геометрии для получения информации о вычислении кривизны.) Листинг 2.21. Обобщенное разбиение ча(б 5ОЬб]ч(бе((1оа! О1[2], г!Оас О2[2], Г!Ьа! вЗ[2], Г1оат со!о!с, !ППХ бер!Ь) ( 6!(!оаг ч1[3], ч2[3], чЗ[3], п1[3], п2[3], пЗ[3]; 6сг!Ьа! О12[2], О23[2], О32[2]; 6Е!и! !; (! (берса == вахберсь свгч(в2) < 5ОГ((О1, ч1, п1); 5вгг(О2, ч2, п2); 5вгг(ОЗ. чз, пз); а!Век(п(6! РОЕт60Н); К!Но/на!Згч(П1); Б!Ногаа!Згч(П2); Х!Ногае!Згч(ПЗ); В!ЕПОО; ГЕ!ОГП; (свгч(О1) < сосо!с Йа свго(Г аа свгч(ОЗ) < св!ОГ!)) [ х!Нег!ехЗЕч(ч1); Х!Нег(ехзгч(ч2); Х!НегсехЗтч(чЗ); ) (ог (! = О; ! < 2; ]++) ( О12[5! = (О1[ч! + О2[!])/2.0; в23[5] = (О2[5! <ОЗ[(])/2.0; О31[!] = (ОЗ[З] +О1[(])/2.0; 5ОЬб/ч]бе(О1, О12, в31, 5ОЬбзч(бе(О2, О23, О12, 5ОЬб(ч(бе(ОЗ, О31, О23, 5ОЬб(ч(бе(О12, О23, О31 св!Ьг(, бер!Ь+1); свсогт, бер!Ь+1); св!О(Г, берть+1); св!Отг, берть+1) Листинг 2.21 показывает рекурсивную процедуру разбиения треугольника до тех пор, пока не достигается максимальная вложенность или максимальная кривизна в трех вершинах не станет меньше некоего предела.
Визуализация Прочитав эту главу, вы сможете: е Просматривать геометрическую модель в любом положении, осуществляя преобразования в трехмерном пространстве ° Управлять местоположением наблюдателя в трехмерном пространстве ° Удалять ненужные части модели из сцены ° работать с набором матриц, которые управляют изменениями модели, и проецировать модель на экран ° Осуществлять групповые трансформации для имитации сложных систем в движении, таких как солнечная система или рука робота ° Обращать результаты конвейера геометрической обработки Визуализация 97 В главе 2 было рассказано, как с помощью ОрепС1. строить геометрические модели для вывода на сцену.
Теперь нужно определиться, как расположить модели в сцене, н определить наиболее удачную точку ее обзора. Конечно, можно использовать и значения по умолчанию, но, скорее всего, вы захотите их изменить. Посмотрите на цветной рисунок 1. Программа, создавшая это изображение, содержала единственное геометрическое описание «строительного» блока, Каждый блок был тщательно позиционнрован в сцене: некоторые блоки были разбросаны ва полу, другие уложены друг на друга на столе, а третьи — собраны вместе для создания глобуса. Также нами была выбрана нужная точка обзора (ч1евро(пг).
Очевидно, мы хотели видеть угол комнаты с глобусом. Но как далеко от стены и где точно должна располагаться точка обзора? Нам нужно, чтобы в конечной сцене прнсутстновал хороший вид из окна, была видна часть пола, и все обьекты в спенс были не просто видны, но и представлены в интересном ракурсе. Эта глава абъясняет, как использовать Орепб1. для решения следукппнх залач: позиционирование и ориентация модели в трехмерном пространстве и определение положення (также и в трехмерном пространстве) наблюдателя, Все зто помогает точно определить, какое изображение получится на экране. , Вам следует помнить, что суть компьютерной графики состоит н создании двухкерных образов трехмерных объектов (онн должны быть двухмерными, поскольку рисуются на плоском экране), но, принимая решения, определявшие, что именно рисуется на экране, валт следует представлять объект в трех измерениях.
Обшее заблуждение состоит в том, что при создании трехмерной графики многие с самого начала полагают, что результирующее изображение появится па плоском двумерном экране. 11ерестаньте думать о том, какие пикселы нужно рисовать, а вместо этого пытайтесь передать трехмерный мир.
Представьте модель в - некоторой 30-вселенной, находящейся внутри вашего компьютера, и доверьте последнему работу по прорисовке нужных пикселов. Совокупность трех операций позволяет компьютеру преобразовать координаты трехмерных обьектов в положение пикселов на экране: ° Трансформации, реализуемые умножением матриц, в том числе моделирование, визуализация и проецирование. К таким операциям относятся врашение, перемещение, масштабирование, отражение, ортогональная и перспективная проекции.
Сцена строится с помошью комбинации нескольких операций. ° Так как сцена рисуется в прямоугольном окне, объекты (или части объектов), оказывающиеся вне этого окна, должны быть отсечены. В трехмерной компьютерной графике отсечение происходит путем отбрасывания объектов, находящихся за плоскостью отсечения. В конечном итоге должно быть установлено соответствие между преобразованными координатами и пиксслами на экране. Этот процесс называют преобразованием окна просмотра (ч1еп рогг). . Перечисленные операции и методы управления ими описываются в следующих асновных разделах данной главы: 98 Глава 3 ° Визуализация ° Обзор: аналогия с камерой.
Дает представление о процессе преобразования через аналогию с процессом фотографирования. В этом разделе представлен простой пример программы, которая преобразует объект, н кратко описываются основные команды преобразований в ОрепС!.. ° Команды преобразования общего назначения. ° Модельно-видовые преобразования. Подробно объясняет, как определить и представить результат модельно-видовых преобразований. Эти преобразования устанавливают взаимное расположение модели и камеры для получения желаемого результата. ° Преобразования проецирования. Описывает, как задать форму и расположение видимого обьежа (ч1еччпя чо1шпе).
Видимый объем определяется согласно тому, как сцена проецируется на экран (в перспективной или ортогональной проекции) и какие выступающие за этот объем части объектов отсекаются. ° Преобразование окна просмотра. Рассказывает, как контролировать преобразование координат трехмерной модели в координаты на экране.
° Проблемы преобразований. Дает несколько советов, как поступить в случае, если вы нс можете получить желаемый эффект при моделировании, просмотре, проецировании объектов и вписывании их в окно просмотра. ь Управление стеком матриц.
Обсуждает, как сохранить и восстановить какие- либо преобразования. Это особенно полезно, когда вы рисуете сложные объекты, состоящие из более простых элементов. ° Дополнительные плоскости отсечения. Описывает, как определить дополнительные плоскости отсечения, кроме определенных видимым объемом. ° Примеры объединения нескольких преобразований. Продемонстрирует вам несколько более сложное использование преобразований. ° Изучив раздел «Обратные, или имитационные, преобразования», вы узнаете, как из оконных координат точки получить первоначальные координаты объекта. Само преобразование (без инверсии) также может быть эмулировано.
Дополнительно в ОрепС1. версии 1.3 были добавлены новые функции для поддержки развертывания матриц по строкам, а не по столбцам (транспонирования, в терминах ОрепС1.). Обзор: аналогия с камерой Процесс преобразования, подготавливающий изображение желаемой сцены, сходен с фотографированием.
Как показано на рис. 3.1, шаги при работе с фотокамерой (или компьютером) могут быть следующими: 1. Установить штатив и направить камеру на сцену (видовое преобразование). 2. Подготовить фотографпруемую сцену в нужной композиции (модельное преобразование). Обзор: аналогия с камерой 99 3. Подобрать объектив или отрегулировать масштабирование (преобразование проекции). 4. Определиться с размером конечной фотографии, например, вы можете захо- теть ее увеличить (впнсывание в окно просмотра). После того как все этапы выполнены, изображение может быть зафиксировано кли сцена нарисована. Фотокамера Компьютер Рис. 3.1.
Аналогия с камерой 100 Глава 3 ° Визуализация Обратите внимание, что эти шаги соответствуют последовательности, в которой вы определяете необходимые преобразования в вашей программе, а не обязательно в последовательности, в которой над вершинами объектов выполняются важные математические операции. Видовые преобразования должны предшествовать модельным в коде, но можно определить проекцию и видовое преобразование в любой точке перед началом рисования. Рисунок 3.2 показывает порядок, в котором эти операции происходят на вашем компьютере. Оконныа координаты Рнс. 3.2, Стадии преобразования вершин Чтобы определить видовое, модельное и проекционное преобразования, мы создадим матрицу М размерности 4 н 4, которая затем будет умножаться на координаты каждой вершины ч в сцене для осуществления преобразования: и' =Мы (Помните, что вершины уже имеют четыре координаты (х, у, г, ш), хотя в большинстве случаев ге = 1, а для двухмерных данных г - О.) Обратите внимание, что видовое и модельное преобразования автоматически применяются к векторам нормали к поверхности, дополнительно к координатам вершин.
(Векторы нормали используются только в системе координат наблюдателя.) Это гарантирует правильное соотношение вектора нормали и данных вершин. Определенные нами видовое и модельное преобразования формируют матрицу модели, которая применяется к входным координатам обьекта для получения выходных координат в системе наблюдения. Затем срабатывают, если такие определены, дополнительные плоскости отсечения с целью удаления некоторых объектов из сцены или для показа объекта в разрезе. После этого ОрепС). применяет матрицу проекции лля получения усеченных координагл. Это преобразование определяет видимый объем; объекты вне его отсекаются и не попадают в финальную сцену.
Затем выполняется деление по перспективе путем деления значений координат на ге для получения нормализованных Обзор: аналогия с камерой 101 координат устройства. (См, приложение Е для получения дополнительной информации о значении т-координаты и ее влиянии на матричные преобразования.) Наконец, преобразоваш<ые координаття переводятся в оконные координаты в ходе преобразования окна просмотра. Изображение при этом сжимается или растягивается. Можно предположить, что координат х и у достаточно для определения точек, отображаемых на экране. Однако все преооразовання выполняются также и над координатой г.