OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 31
Текст из файла (страница 31)
Ди)ньш процесс можно прополжитгп переходя от сустава к суставу (плечо, ло- ють, запястье, пальцы): с!Тгппч)а(еч(1.8, 9.0, О.О), С!ао(4(е(((ОСЧ!оаС) е!Ьон, 0.9, 0,0, !.8); с!тгапчсасе((!.8. о.о, О.о), $1Рпчпнд(г1 х (); 5!544!еч(2.9, 0.4, 51ЬСМчгеСЬЬе(!.0); С!РЬРМа(гчх(); Ластинг 3.7. Рука робота: гоЬос.с ч(зС!с чос чпоисоег = О, е1ьон = 0; чо!4 !п)С(хоче) ( с!С1еагсо1ог(8.8, 8.8, 8.0, 8.0); 415ьаоеМоее!(ОС ЕСАТ). ) чо!О 4!чр1ау(чо)д) ( 41С!еаг(ОС СО!Оп ВОРРЕМ ВТТ)," 41Розьна(г)х(); 61тгап51агеч(-!.8, 8.8, О.О); Х!Ко(агеч((ОСГ!Ьат) зпоо!пег, О.О, О.О, !.О); Х1тгапз)асес(1.8, О.О, 0.0); с1РочпнаСгчх(); 415са1ес(2.9, 8.4, 1.0); продолхгенив .О Обратные, или имитационные, преобразования 141 5!и!1п11(аагзс, агвч); 5!и!1п1101зр!ауМибе(бьет воив(Е ~ Всит ВВВ)! В!и11п1(й1пбой5(ке(500, 50В): 5!ис!п11й!пбойРоз!!!оп(100, 100): В!и!Сгеасей1пбой(агач(В)); (пз(О; В!и(015Р!аугипс(б)зр!ау): 5!исаезлареГипс(гезьаре): В!и(кеуЬоагбгипс(хеуЬоагб); З!и!Ма1псооо О; ге!игп О, Упражнение ° Измените листинг 3.7, добавив дополнительные сегменты к руке.
° Дополните руку сегментами в соответствующих местах, например пальцами на запястье, как показано па рис. 3.26. Подсказка: используйтс функции 51Ризпнасг(х О и я1Рорнасг(х О для сохранения и восстановления положения и ориентации системы координат в кисти. Текущая матрица сохраняется перед позиционированием каждого пальца и восстанавливается после его рисования. Рис. 3.26.
Рука робота с пальцами Пособия по преобразованиям от Нзйта Робинса Если у вас есть набор программ от Нэйта Робинса, вернитесь к программе преобразований и запустите ее снова. Задействуйте раскрывающееся меню для изменения последовательности операций В!цитате'О и а!Тгапз!асео и посмотрите аа результат этих изменений. Обратные, или имитационные, преобразования Конвейер геометрической обработки очень удобен дтя работы с видовыми матрицами и матрицами проекций. В процессе преобразования мировые координаты вершин переводятся в оконные (экранные) координаты. Однако есть ситуации, в которых нужно повернуть этот процесс вспять.
Например, когда приложение ориентируется в трехмерном пространстве с помощью мыши. Мышь возвращает положение указателя на плоскости; соответственно, приложению нужно как-то узнать трехмерные координаты на основе двухмерных. 142 Глава 3 ° Визуализация Обратные преобразования выполнякст функции СШ я1ицпРго)ест() и х1ицпР го) ес с 4 () . 11а основе трехмерных оконных координат преобразованных вершин и всех преобразований, которые с ними происходили, функция е1и0прго)ест() возвращает начальные мировые координаты вершин. Функция к1ицпРго) есС4 () используется, если глубина не укладывается в диапазон по умолчанию [О; 1[.
(пс к(ицпрго1есс(СЫопЫе гелпх, С(х[оцЫе т(ну, С(х[оц[э1е гипг, сопзс С[х[онЫе тог[е(Ма(пх[16[, сопзс С(х1оцЫе рю)ЛХигпх[16[, сопя: С1.шс тте)югт[4], С(х(оцЫе "ОЬ)х, С[х[оцЫе "ОЬ)у, С1.с1оцЫе "о)уг); Переводит оконные координаты (т(лх, ндпу, квлг) в координаты объекта, опираясь на преобразования, определенные молельно-видовой матрицей (аргумент тоде(Магг(х), матрицей проекций (рго)Ма(пх) и окном просмотра (пекрогг). Координаты объекта возврап(аются через указатели ОЬ)х, ОЬ)у, оЬ)д Функция возвращает 6С ТЙОЕ в случае успешного завершения н 6С ЕАЕ5Е в случае ошибки (если матрица необратима). Эта операция нс пытается отсекать координаты окна просмотра и равнодушна к координатам глубины, если они выходят за значения, заданные функцией к1Оергпйапае ().
Существует ряд сложностей при попытке инвертирования процесса преобразования. Двухмерное положение на зкране может отсчитываться в трехмерном пространстве от лсобого места па некоторой линии. Для устранения неоднозначности результата функция я1ицпрго) есс() требует, чтобы оконная координата глубины (т(пг) была представлена в терминах функции д10ерспйапае() .
(Для получения более подробной информации о диапазоне глубины см. раздел «Измененная координата глубиныю) По умолчанию лля функции к10ерсппапке() значение влиг, равное 0.0, требует мировые координаты преобразованной точки на ближней плоскости отсечения, в то время как т(лг, равное 1.О, соответствует точкам, расположенным на дальней плоскости отсечения. Листинг 3 8 демонстрирует пример использования функции а1иппрго)есс() с целью чтения координат мыши и определения трехмерной точки на ближней и дальней плоскостях отсечения. Вычисленные мировые координаты выводятся в стандартный поток вывода, но окно остается черным. Листинг 3.8.
Обратное преобразование: нпрго)есС.с чо1О О)5Р1ду(чо(О) ( В161еаг(6С СОСОИ ВОЕЕЕР В1Т); В1Е1о«П(); «о(о гезпаре(1пс и, 1пс и) ( В1ИеирогС(В. О, (6(зъс«1) и, (6(з)се() П): В1нагг(хнопе(6С РИО)ЕСТ1ОИ): В(Созе(е оп С ( Су (): ВсорегзресС(ие(45,В, (6СС(оаС) иг(ОСГ(оаС) П, (.О, сво.о); В1нагг)хноее(6С ИООЕСЧ1ЕН); В\Соае1еепС(СУ(): Обратные, или имитационные, преобразования 143 ча(б вочве((пт ЬоССоп, (пС веете, (пт х, тпС у) 6[!пт Ыеырогт[4); 6[бонЫе вчватгтх(16], рго)ватгтх[16]; 6[!и! геа1у; /' Орепоь-координата у *Г 6[боиЫе ых, ну, нс; I* возвращенные мировые х-, у-, с-координаты 'г' вн(Сси (Ьигтоп) ( саве ОСОТ СЕЕТ 90ТТОН: т 1 (втате == ОСОТ ООИМ) ( 916е11пСеаегч(61 Ч1ЕИРОМТ, чзеырогС); 6!ОеСОоиЫеч(6С МООЕСЧ1ЕИ МАТМ!Х, вчватг!х); Й!ОеСОанЫеч(6С РМО)ЕСТ10М МА!а]Х, рго)ватгтх); /' ч!еирогс[3] — высота окна в пиксепах '7 геа1у = ч(еырогт[3] — (6С(пС) у — 1; ргтпт1 (" Координаты курсора равны (%4б, %4б)тп", х, геа1у); 9!ннпрго]есС((6СбонЫе) х, (6СбооЫе) геа!у, 0.0, вчватг!х, рго)ватг(х, ч!еырогт, Йнх.
Йну, Йнс); рг!пс1("Мировые координаты при х = 0,0 равны (%1, в1, "в1))п", ых, ну, нх); 9!оОпРго)ест((6Сбооые) х, (6(бооЫе) геа1у, 1.0, вчватг!х, рго]васгтх, чтенрогс, Йнх, Йну, Йнх); рг!птт("Мировые координаты при с = 1.0 равны (%1, %1, М1)сп", нх, ну, нс); ] Ьгеан; саве 6СОТ 916НТ 90ТТОМ: т 1 (втате == ОСОТ ООИМ) ехтт(0); Ьгеае; бе1ао11: Ьгеак; (пт ва(п((пС атас, сиаг*' агбч) ( 6!чс1птс(Йагас, агах); 6!ес]п(сотар!аумобе(6снт 5]нбсе [ 6601 а69); 6!иС1п(СИ!пбон5(се(590, 590); 6!иС1п!Сй(пбонРовтттоп(199, 100); 11нССгеатей!пбон(агах[9]); 5!чСО(вр!аууопс(бтвр!ау); Й!итаевпареропс(гевьаре); 6!отнооверипс(воиве); 6!етна(п[оор(); ге(огп О; ) В С].[) [.3 представлена измененная версия а]и(]яр го]есС().
Команда 1100пРго) есс4() может работать с нестандартным диапазоном а10ерсп)(алке() и со значением координаты то, отличным от 1. 144 Глава 3 к Визуализация (пг б1ицпрго)есс4(0)х»оиЫе плпх, 01х)оггЫе гегпу, 014)оиЫе пппг, 01.г1оиЫе сйрпь сопя( 0(х)оиЫе тот(е1Магпх»16», сопя( 014(оиЫе рго)Маптх»16», сопя( 01зп( огеврогг»4», 01.с1ашрг) гМеаг, 01.с!ашрс1 ггаг, 01.доиЫе 'оЬух, 01.с1оиЫе "оЬуу, 0(х)оиЫе "о(уг, 0(х)оиЫе "о(ув)' Выполняет действия, аналогичные функции д1ицпрго)'ест().
Переводит оконные координаты (вгпх, вгпу, алпг) в координаты объекта, опираясь на преобразования, определенные модельно-видовой матрицей (аргумент тог(е(Магпх), матрицей проекций (рго)Ма1пх), окном просмотра (иеврогт) и диапазоном глубины от г№аг до ггаг. Координаты объекта возвращаются через указатели о!ух, оЬ)у, оЬ)г. Функция в1ирго)ест 0 из библиотеки 0(.П связана с функцией 61иипРго) ест(). Функция в1ирго) ест() имитирует действия конвейера преобразований. Получая трехмерные мировые координаты и все преобразования над ними, функция д1ирго1ест() возвращает преобразованные оконные координаты.
(п( в1ирго) ест(0(х)оиЫе оЬ)х, 0)х»оиЫе оЬ)у, 01ЛоиЫе оЬ)г, сопя( 0(х)оиЫе то4е1Магпх( гб~, сопз( 0 ЫоиЫе рпуМагпх( 1б», сопя( 01зпт игперогг(4 Ь 0(х)оиЫе "в(пх, 01.йоиЫе "вту, 01.доиЫе "в(пг); Переводит объектные координаты (оЬ)х, облу, оЬ)г) в оконные координаты, используя преобразования, определенные модельно-видовой матрицей (тоаге!Магпх), матрицсй проекций (рго)Маглх) и окном просмотра (пгеврогг). Координаты объекта возвращаются через указатели втх, вту, плпг. Функция возвращает значение бб Тй()Е в случае успешного завершения и 6Е РАЕ5Š— в случае ошибки.
ВНИМАНИЕ матрицы, обрабатываемые функциями д!ицпРго)егх(), д!иипРго)есс4П и д!ирю)ест(), — стандартные развернутые по столбцам матрицы Орепбы Вы можете использовать команды д!бе(Оооо(етй и д(бе11пгедепг() для получения текущих матриц бс мООесу1еу(РмАтп(х, Я. РаО)ест)Он МАТа1Х и Я. Ч1ЕУ(РОПТ. Цвет После прочтения атой главы вы сможете: ° Выбирать и использовать в приложении Д6ВА-цвет или цветовой индекс е Указывать требуемые цвета для рисования объектов ° Рисовать многоугольник, закрашенный более чем одним цветом, с плавными переходами цвета 146 Глава й ° Цвет Цель большинства приложений Орепбй — нарисовать цветное изображение в окне на экране.
Окно — это прямоугольный массив пикселов, отображенных собственным цветом. Поэтому, в некотором смысле, цель всех вычислений, проводимых Орепб!, — определение конечного цвета каждого ппксела, рисуемого на экране. В следующих основных разделах этой главы описываются команды задания цвета и то, как Орепбй их интерпретирует: ° Цветовосприятие. Описывает, как глаз воспринимает цвета. ° Вычисление цвета. Рассматривает зависимости между пикселами на экране монитора и их цветом.
Также в нем обозреваются модель ВОВА и индексированные цвета. ° КСВА в сравнении с индексированным цветом. Рассказывает о том, как графическое оборудование поддерживает эти два режима и как выбрать нужный вам режим. е Задание цветовой и полутоновой модели. Описывает команды ОрепСЕ, используемыс для определения требуемой цветовой или полутоновой модели. Цветовосприятие С точки зрения физики свет состоит из фотонов — мельчайших частиц света, кажлая из которых перемешается по своему собственному пути и имеет индивидуальную частоту колебаний (или длину волны, или энергию — частота, длина волны энергия зависят друг от друга).