М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 80
Текст из файла (страница 80)
(Классический пример наложения окружения — злобный киборг в фильме «Терминатор-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. «Кубические» текстуры «Кубические» карты текстур (спЬе шар сехспге) — это специальная техника, ис- пользующая набор из шести двухмерных изображений текстур для получения куба с центром в начале координат.
Координаты текстуры (ж г, г) для каждого фрагмента обрабатываются как вектор, при этом каждый тексел представляет что-то, что видно на кубе при «взгляде» из начала координат. Кубические карты идеальны для эффектов наложения окружения, отражения и освещения. Кубиче- ские карты могут также «обернуть» сферический объект текстурами, распреде- ляя текселы относительно каждой из ее сторон. Кубические карты подготавливаются с помощью шести вызовов РТТех1ааке20(), где значение аргумента га1Хег указывает грань куба (+Х, -Х, + г', -'г', +2 или -2). Такое именование означает, каждая кубическая текстура должна иметь те же раз- меры, что и грани куба, сформированного с одинаковым количеством текселов на каждой грани, как показано в следующем коде, где значение 1тадеЯге устанавли- вается в степень 2: 51гех1вазе20(6( ТЕХТОРЕ СОВЕ ИАР РО51Т1ЧЕ Х, О, бь йбВА, 1вазе51ге, 1вазе51ге, О, 6( йбВА, бь ОМ516МЕО ВУТЕ, 1вазе1); 61Тех1аазе20(бг ТЕХТОРЕ СОВЕ ИАР МЕОАТ1ЙЕ Х, О, 6С йбВА, заазе5!ге, !вайе5!ге, В, 6С йбВА, 6( ОМ516МЕО ВУТЕ, !вазе«); В\Тех1вазе20(бь ТЕХТОйЕ СОВЕ ИАР РО51Т1ЧЕ У, В, бь йбВА, 1аазе5!ге, 1аазе51ге, В, 6( йбВА, бг ОМ516МЕО ВУТЕ, 1вазе2); В1Т«х1вазе20(6( ТЕХТОРЕ СОВЕ ИАР МЕОАТ1ЧЕ У, В, 6С йбВА, (аайе51ге, зваве51ге, О, бг РОВА, бь ОМ516МЕО ВУТЕ, 1аазе5); ВТТех(вазе20(бь ТЕХТОйЕ СОВЕ МАР РО51Т1ЧЕ 2, О, 6С йбВА, 1вазе51ге, 1аазе51ге, О, 6С РОВА, 6С ОМ516МЕО ВУТЕ, 1аазеЗ); В\Тех1вазе20(бь ТЕХТОРЕ СОВЕ ИАР МЕОАТ1ЧЕ 2, О, СС йбВА, 1аазе51ге, 1вайе51ге, В, 6С йбВА, 6( ОМ516МЕО ВУТЕ, !аазеб); Изображения «кубических» текстур генерируются помещением (фактическим или имитацией) камеры в начало координат сцены, этой камерой делаются шесть «моментальных снимков» с полем зрения в 90', с ориентацией вдоль положи- тельных и отрицательных осей.
«Моментальные снимки» разбивают полное трехмерное пространство на шесть пирамид с верхушками в начале координат. К кубическим картам применимы все стандартные возможности текстурирова- ния, такие как границы текстур, множественные отображения, копирование изо- бражений, парциалъные изображения и мультитекстурирование. Для них также предусмотрены специальные текстуры-посредники (бс РРОХУ ТЕХТОРЕ СОВЕ Автоматическая генерация координат текстур 369 НАР), поскольку кубическим картам требуется в шесть раз больше памяти, чем юбыкновенным двухмерным текстурам.
Параметры текстур и объекты текстур применяются к кубической карте в целом, а не для каждой отдельной грани ку ба. Следующий код представляет собой пример установки режима обработки границ н методов фильтрации для аргумента Гагяед установленного в значение 6Е ТЕХТОРЕ СОВЕ МАР: 51техрагавекег((6( ТЕХТОНЕ СОВЕ МАР, бс ТЕХТОНЕ ИРАР 5, бс НЕРЕАТ); 51Т«хРагав«С«г1(6( ТЕХТОЙЕ СОВЕ МАР, бс ТЕХТОНЕ ИНАР Т, 6( НЕРЕАТ); В)техвагав«С«гс(бь тЕХтОНЕ СОВЕ МАР, бс тЕХтОНЕ ИНАР Н, бс НЕРЕАТ); В(техвагавеС«гс(6С тЕХтОНЕ СОВЕ ИАР, бк тЕХтОНЕ ИА6 Р)СтЕН, бс НЕАНЕЕТ); 51техРагавекег((бс ТЕХТОРЕ СОВЕ МАР, 6( ТЕХТОНЕ М1М Р1СТЕН, 6С НЕАРЕ5Т): Чтобы узнать, какую текстуру (и текселы) использовать для данного фрагмента, сначала выбираются текущие координаты (ж г, г) одной из шести текстур, отталкиваясь от того, где ж г и г имеют наибольшие абсолсотные значения (главные всн), и знака зтих значений (ориентация).
Из оставшихся двух координат выделяются координаты с наибольшим значением для определения новых координат (к', ('), которые используются для подстановки соответствуюсцего тексела(-ов) выбранной текстуры кубической карты. Хотя вы можете вычислить и задать координаты текстуры явно, это, как правило, трудоемко и вовсе не нужно. Практически всегда для генерации координат «кубнческих» текстур используется команда 61техбеп» (), предполагающая работу в одном из режимов: 6Е НЕРЕЕСТ) ОМ МАР или 6С МОНМАС МАР. Режим отражения 6С кЕРЕЕСТХОМ МАР используется для осуществления тех же вычислений (после шага 3 алгоритма вычисления «сферических» координат, описанного в разделе «»Сферические" карты»), что и выполняемые в режиме генерации координат текстур 6С 5РИЕКЕ МАР.
Здесь вместо определения (г, г„г) вни проводятся для координат (в, д г). Режим отражения хорошо подходит для явложения окружения и является альтернативой «сферическому» наложению. нормальный режим бе монмАС мАР особенно полезен при визуализации сцен с бесконечно удаленными (или локальными) источниками света и рассеянным втражением. Здесь используется модельно-видовая матрица для преобразования нормалей вершин к системе координат наблюдателя. Результирующие значения (и, п„п,) становятся координатами текстуры (ж г, г). В листинге 9.9 генерация коюрдинат текстур выполняется для нормального режима, а также включено текстурирование с применением кубических карт. Листинг 9.9.
Генерация координат кубических текстур: СОЬешар.с С1техбеп((6С 5, бс ТЕХТОРЕ 6ЕМ МОРЕ, бс ИОНМАС МАР); 51техбеп1(6С Т, бс ТЕХТОНЕ 6ЕН ИОВЕ, 6( МОНМАС МАР); с1техбеп1(бк Н, бс ТЕХТОНЕ 6ЕИ МОВЕ, бь МОНМАС МАР); В!Еп»Ые(бк ТЕХТОНЕ 6ЕМ 5); В1(пвЫе(бк ТЕХТОРЕ 6ЕЙ Т); 51(п»Ы«(бь ТЕХТОНЕ 6ЕМ Н); /' Спгп оп спЬе вар Сехкиг!пн »/ (1(паЬ1е(бс ТЕХТОНЕ СОВЕ МАР); 370 Глава 9 ° Наложение текстур Мультитекстурирование В процессе стандартного текстурирования к многоугольнику применяется отдельное изображение текстуры.
Мультитекстурирование позволяет применить несколько текстур, одна за другой в очереди операций над текстурами, к одному многоугольнику. Эта совокупность так называемых модулей текстур (гехгпге пп11з), где каждый модуль участвует в отдельной операции над текстурами и результаты передаются на следующий этап конвейера до тех пор, пока не будут обработаны все определенные модули. На рис. 9.14 показано, как фрагменты подвергаются четырем операциям текстурирования — по одной на каждый из четырех модулей текстуры.
До твкотурировв Рис. 9.14. Конвейер мультитекстурирования Мультитекстурирование относится к поддержанным на расширенном уровне технологиям визуализации, таким как освещение, деколи, композиция и детализация текстур. Последовательность действий при мультитекстурировании Чтобы написать код, использующий мультитекстурирование, выполните следующие действия: ПРИМЕЧАНИЕ В режиме обратной связи мультитекпурирование не определено вне первого модуля текпури.