OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 80
Текст из файла (страница 80)
Автоматическое генерирование координат текстур: (ехдеп.с ябе(]пе ятг(ре!вааей>б(П 32 6(иЬу!е ясг(ре1ваэе(4'ясг(ре1ваэейчбть]; ч!а(чс 6(и!пт техкэве; чо>б вахе5Сг>ре1ваае(чочб) ( (п! 1; (ог (> = Э; > < я(г>ре1вааей(б!Ь; )++) ( ясг(ре]вазе(4*1] = (6сиьу!е) ((> =4> 2 255: О>; ятг>ре1ваае(4']ч1! = (6СиЬУ!е) ((]>4) ? 255: 0); я!г(ре1ваае(4'1+2] = (6(иЬусе) 9; ягг(ре1ваае(4']+3] = (6(иоуте) 255; р Ппоскосчи дпя генерации координат текстур чl иа((с 6С(!оас кечиа1тего(] = ( 1.0, 9,0, 9.0, 9.9); чш(>с 6С(1оа( 51ап!еб(] = (1.0, 1.0, 1.0, 0.9>; ч!а((с Ос(1оас *сиггеп(сбег(; Иа((с Эсепив сиггеп(Р1апе; ч(а!чс 6((пс сиггеп(6епМобе; чо(б >пчт(чо>Ч!) ( 91С1еагса1ог(9.9, 0.0, 0.9, 0.9); 91Епао]е(6( ОЕРТН ТЕ5Т); 515пабеиобе1(6С 5МООТН); вахе5(г! ре1ваае(); а]Р>ке)5(огеч(ОС ОНРДСК ДЩОММЕМТ.
И; 516ептектигея(1, $(екиаве); а>В(потек!иге(6( ТЕХТОМЕ 10, текиаве); продолжение бч Автоматическая генерация координат текстур Зеа5 саче 'Е'; соггеп(6епиобе = 6С ЕЧЕ С1МЕАК; соггепСР1апе = 6С ЕЧЕ РСАМЕ; В1ТЕХОЕПч<6( 5, 6С ТЕХТОРЕ 6ЕМ МООЕ, СОГГЕПСОЕПИОИЕ): В1техбепеч(6с 5, соггепсР1апе, сиггепссоеее); В1ЬСРоагкеб!ар!ау(); Ьгеаа; саче 'о': саае '0'; соггепгбепИобе = 6( ОВ)ЕСТ (1МЕАИ; сиггепСР1апе = 6С ОВ)ЕСТ РСАМЕ; В1Техбеп!(6С 5, 6С ТЕХТОРЕ 6ЕМ МООЕ, соггепС6епИобе); В!Техбеп(ч(6( 5, соггепСР1апе, сиггепгСоеЕЕ); В1иСРоьСРеб!ьР1аУ(); Ьгеак, саве 'ь': саае '5': соггепССоеЕЕ = 51ап(еб; В1Техбеп(ч(6С 5, сиггепСР)апе, сиггепССоеЕЕ); В!оСРоаСМебы ар!ау<); Ьгеах.
сдае 'х': саае 'Х'; сиггепССоеЕЕ = хеччассего; В1техбепеч(6с 5, соггепсР1апе, саггепссоеее); В(о!Рос(аеб!ар(ау(): Ьгеах; саве 27: ехЕС(е); Ьгеах; бе(аи1С: Ьгеах', <пс аа(п(зпс агас, спаг*' агвч) ( В1и(1п!С(аагвс, агвч); 51оС!п!'СОЕьР1ауМобе(6< ОТ 51МОСЕ [ 6(ОТ РОВ [ 6!ОТ ОЕРТН); 51о(1п!СН!пбои5зсе(256. 256); 51ос1п!СИ!пбоиРоь!с(оп(1ВВ, 100); В!оССгеаеекм пбои(агвч[0)); <п!1(); В!о!в!ьр1аууопс(б!ар!ау); В1иСРеаиарерипс(геьоаре); В1о(кеуЬоагбрипс(хеуЬоагб); В!о!на(п(оор(): гееогп О; ) Генерация текстур для координаты з включается передачей параметра 6 С ТЕХТ О РЕ ЕЕМ 5 в функцию к1Епаа!е(); для других координат это параметры 6С ТЕХТОРЕ ЕЕМ Т, 6С ТЕХТОРЕ 6ЕМ Р и 61 ТЕХТОРЕ 6ЕМ ([. Для отключения этого режима Збб Глава 9 ° Наложение текстур используется команда 610)зао)е() с подходящей константой.
Также обратите внимание на использование 61 ЯЕ Р ЕАТ с целью получения линий контура, повторенных поперек чайника. Функция текстуры 61 ОВ) ЕСТ 11МЕАЯ вычисляет координаты текстуры в системе координат модели. В программе из листинга 9.8 сначала применяется эта функция, так что контуры линий перпендикулярны основанию чайника, без оглядки на то, что чайник может вращаться или измениться точка наблюдения.
Однако, если вы нажмете клавишу е, вы переключитесь из режима 61 ОВ)ЕСТ 11МЕАЯ в режим 61 Е 1'Е 11МЕАЯ, и контуры будут вычисляться относительно системы координат наблюдателя. (Нажатие клавиши о снова возвращает режим 6! ОВ) ЕСТ 1 1М ЕАЯ) Если опорная плоскость х - О, на чайнике рисуются красные полосы, параллельные плоскости уг от точки наблюдения, как показано на цветном рис. 18. Математически зто описывается так: вы умножаете вектор (р, р, рз р,) на обратную модельно-видовую матрипу, чтобы получить значения, используемые в вычислении расстояния до плоскости.
Координата текстуры генерируется следующей функцией: сгенерированная координата - р,'х, + р,.'у, + рз'г„-~ р,'тв„ где (р,' р,' р,' р,') = (р, р,, рз р4) и-'. В этом случае (х„у„, г„, т,) — координаты вершины в системе наблюдателя, а значения рь..., р, передаются аргументом рахат в процедуру к1Техбел * (), при этом аргумент рпате установлен в значение 61 ЕТЕ РСАМЕ. Значения со штрихами вычисляются только во время их задания, поэтому данная операция не настолько затратна в вычислительном отношении. Во всех этих примерах для генерации контуров используется одна координата. Координаты к г и (если это нужно) г могут быть сгенерированы независимо для того, чтобы обозначить расстояния до двух или трех различных плоскостей. Соответствующе сформированная двух- или трехмерная карта текстуры вырабатывает два или три набора контуров, которые можно наблюдать одновременно.
Чтобы внести дополнительную сложность, вы можете смешать функции генерации координат. Например, можно вычислить координату з, используя режим 61 ОВ)ЕСТ СТМЕАЯ, а координату à — с помощью 61 ЕУЕ 11МЕАЯ. «Сферические» карты Задача наложения на рисуемый объект его окружения в таком изменении цветов поверхности объекта, как если бы он отражал свое ближайшее окружение.
Другими словами, если вы смотрите на безупречно отполированный, абсолютно отражающий серебряный объект в комнате, вы видите на поверхности объекта отражение всех стен, пола и других элементов, присутствующих в комнате. (Классический пример наложения окружения — злобный киборг в фильме «Терминатор-2м) Видимые вами отражения зависят от положения ваших глаз и от положения и угла наклона серебряного объекта. Для получения данного эффекта вам следует создать соответствующую карту текстуры, а задачу сгенерировать ее координаты поручить ОрепО1..
Автоматическая генерация координат тек(лур ЗбУ Наложение окружения — это приближение, основанное на допущении, что элененты окружения расположены далеко от поверхности зеркального объекта — то есть имеет место ситуация маленького объекта в большом помещении. При таком вопущении, чтобы вычислить цвет точки поверхности, проводят луч от наблюдателя к поверхности и отражают его в сторону. Направление отражения луча и определяет цвет, которым будет окрашена точка поверхности, Определение цнета Вля ках(лого направления на плоской карте текстуры эквивалентно помещению идеально отполированной сферы в центре относительно своего окружения и снятня картинки с нее камерой, расположенной на большом расстоянии и оснащенной оптической системой, фокусное расстояние которой настолько же велико.
Переходя от приближения к математике, это фокусное расстояние бесконечно далеко и камера также удалена в бесконечность. Следовательно, «декодированне» цвета затрагивает округлую область, касающуюся верхнего, нижнего, левого н правого краев карты. Значения текстуры снаружи окружности не принципиавьны, так как они не участвуют в процессе наложения окружения. Чтобы получить безупречно корректную карту текстуры, вам нужно «сделать фотографию» бесконечно большой серебряной сферы в ее «интерьере» с помощью бесконечно удаленной камеры с бесконечно большим фокусным расстоянием, а затем эту фотографию «отсканировать».
Чтобы приблизиться к этому бесконечно идеальному результату, вы можете сделать снимок сферы очень широкоугольным объективом («рыбьим глазом»). На цветном рисунке 2! показана фотографня, полученная таким образом, и результаты ее использования для наложения окружения. При наличии необходимой текстуры вы можете активировать алгоритм ОрепСП Вля наложения окружения. Этот алгоритм находит точки поверхности сферы с нужной касательной к поверхности и окрашивает эту точку объекта цветом, видимым в соответствующей точке сферы. Чтобы сгенерировать координаты текстуры автоматически с учетом наложения юкружения, используйте этот код в своей программе: В!Техбеп!(6Е 5. 6( ТЕХТЭНЕ 6ЕН МОЭЕ, 6( 5РНЕНЕ ИАР); В)техбеп((61 Т, 6Е ТЕХТННЕ 6ЕМ МОВЕ, 6Е 5РНЕНЕ ИАР); В(Епаще(6Е ТЕХТННЕ 6ЕН 5); Вмпаще(6Е ТЕХТННЕ 6ЕН Т); Прн использовании константы 6Е 5РНЕйЕ МАР создаются надлежащие для наложения окружения координаты текстуры.
Как видно из кода, вам нужно задать ее дня обоих направлений — з и и При этом от вас не требуется задание каких-либо параметров для функции генерации координат текстур. В случае функции 6Е 5РНЕЙЕ МАР координаты текстуры генерируются согласно последовательности следующих математических операций: Е н — единичный вектор, направленный от начала координат к вершине (в координатах наблюдателя). 2. п' — теку(ций вектор нормали после преобразования в координаты наблюдателя. 3, г — вектор отражения, (г» г, г,)т, который вычисляется по формуле и — 2п'и'тц. 368 Глава 9 ° Наложение текстур 4. Временное промежуточное значение, т, вычисляется по формуле =21,' „' +!, +::~'. 5. Наконец, координаты текстуры з и г рассчитываются как з - г,/т -~ 1/2 г = г„/т+ 1/2.
«Кубические» текстуры «Кубические» карты текстур (спЬе шар сехспге) — это специальная техника, ис- пользующая набор из шести двухмерных изображений текстур для получения куба с центром в начале координат. Координаты текстуры (ж г, г) для каждого фрагмента обрабатываются как вектор, при этом каждый тексел представляет что-то, что видно на кубе при «взгляде» из начала координат. Кубические карты идеальны для эффектов наложения окружения, отражения и освещения.