OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 43
Текст из файла (страница 43)
Озедующие два уравнения применяются ОрепСЕ. для расчета первичного и вто- ззчвого цветов: пеРвичный цвет - еш(зз)оп„„,ы + ашЬ1епг|с„|с|„~вс х ашЬ)епс „и„,| + ( к (зро111яЬГ еЯесг)с х х (ашЪ|епгмм к ашЬ(епс„„„,л в (шах(Е и, 0)) к с(1Кцзез„м к с((базе,„„„„|1,; и-с 1 вторичный цвет = ")„(, ), к (зро111яЬг е((ест), я ,.О ссс +lг с(+ Е с(2 к 1(шах(з и, 0))'и"'""' х зресц1агмм х зресц1аг„„„с~, И процессе текстурирования с цветами текстуры комбинируется только первичвсй цвет.
После текстурирования вторичный цвет добавляется к комбинации прввчного цвета и цвета текстуры, Освещение в режиме индексации цвета И режиме индексации цвета параметры, задаваемые РСВА-величинами, либо не виывают влияния, либо интерпретируются особым образом. Поскольку в режи|с индексации цвета намного сложнее достигнуть определенных эффектов, свявнвых с освещением, следует применять режим РСВА везде, где зто возможно. Фа|тически в режиме индексированных цветов параметры источника света, мовцс освещения или свойств материала задаются тоже в форме РСВА-значений. Используемые параметры источника света — 6Е 01РЕ05Е и 6Е 5РЕЕОЕАК, а также звчевне блеска 6е 5н1н1ме55.
С помощью параметров 6е 01ее05е и 61 11КОсс1К (с||с и з, соответственно) вычисляются интенсивности рассеянной и отрхевной составляющих (с(э и з,с): с(„= О,ЗОВ(сХс) + 0,59С(с1) + 0,11В(сгс); |„- О,ЗОВ(зс) ч 0,59С(зс) + 0,11В(зс), в|И(х), С(х) и В(х) представляют красный, зеленый и синий компоненты цвета х, тзетственно. Весовые коэффициенты О.ЗО, 0.59 и 0.11 отражают степень воснятия компонентов цвета человеческим глазом — наши глаза наиболее чувсттьны к зеленому цвету и наименее восприимчивы к синему.
е а задания цвета материала в режиме индексации цвета 61натег1а1'() вызысо специальным параметром 6Е СОЕОк 1МОЕХЕ5: 196 Глава 5 ° Освещение 6Си(1оаС ваС со1огвар() = ( 16.9, 47.9, 79.0 ); 61иагег(41!«(6С ЕаОНТ, 6С СОСОа 1МОЕХЕ5, ваС со1огвар), Три числа карты задают соответственно индексы фонового, рассеянного и отраженного цветов материала. Другими словами, ОрепСВ считает цвет с индексом, заданным в первом числе (в данном случае !0.0), — чистым фоновым цветом, цвет с индексом, заданным во втором числе (47.0), — чистым диффузным цветом, а цвет с индексом, заданным в третьем числе (79.0), — чистым отраженным цветом.
(По умолчанию фоновый цвет имеет индекс 0.0, а рассеянный и отраженный цвета — индекс 1.0. Заметим, что команда 61Со1огИасег ! а1() не работает в режиме индексирования цветов.) Во время рисования сцены ОрепСВ использует цвета, ассоциированные с индексами данного диапазона, для закраски объектов сцены. Таким образом, необходимо верно построить цветовую таблицу между этими индексами (в данном примере между 16 и 47 и затем между 47 и 79). Обычно цветовая карта строится из близких ВСВ-значений, но достижение определенных эффектов оправдывает и другие соображения. Далее приведен пример «плавной» цветовой карты, начинающейся с черного фонового цвета, на пути к белому отраженному цвету ми. нующей фиолетовый рассеянный цвет: Сог (1=9;!<32;(++)( 61эгзеССо1ог(16 + (, 1.0 * (!/32,0), 0.9, 1.0 ' (!/32.9)); 61и15еССа1ог(48 + (, 1.0, 1.0 ' (!/32.0), 1,0); ) Функция я1п с 5е сСо1о г () библиотеки СШТ принимает четыре аргумента.
Оиа ассоциирует индекс, задаваемый первым аргументом, с КСВ-тройкой, задаваемой вторым, третьим и четвертым аргументами. При ! - 0 цветовой индекс 16 связывается с черным )ССВ-цветом (О, О, О). Цвет в карте монотонно изменяется до рассеянного цвета материала с индексом 47 (при ! = 31), которому соответствует фиолетовый ВСВ-цвет (1.О, 0.0, 1.О). Вторая команда в теле цикла строит карту между фиолетовым рассеянным цветом и белым (1.О, ВО, 1,О) отраженным цветом (индекс 79). Математика освещения в режиме индексации цвета Как и следовало ожидать, поскольку в режиме индексации цвета доступно другое подмножество параметров освещения, нежели в ВСВА-режиме, расчеты также производятся иначе.
Так как в этом режиме исходящий от материала свет, а также фоновое освещение не задаются, здесь представляют интерес только диффузная и отраженная составляющие источников света. Но даже эти элементы рассчитываются иначе: так, как показано ниже. Начнем с диффузной и отраженной составляющих из ссСВА-уравнений. В рассеЯиипй СОСтаВЛЯЮЩЕЙ ЗаМЕНИМ Й((цэсмда к П(1)ПЭЕ«а,„,а На С(,/, ВЫЧИСЛЕННОЕ В ПРЕДЫ- душем разделе для режима индексирования цветов. Аналогично, для отраженной составляющей вместо зресп)аг!„и к зресп)аг„„„,м подставим зн из предыдущего раздела.
(Ослабление, эффект прожектора и другие компоненты вычисляются Освещение в режиме индексации цвета 197 пк же, как в КСВАрежиме) Назовем зти модифицированные злементы пи з со- етветственно. Теперь пусть з' = пнп(з, 1). Вычислим с = а. + е(1- з') (о — а ) + з'(з — а,), Еае а„, Ы, и з представляют собой индексы фонового, рассеянного и отраженного цветов материала, установленные командой а!маге г1 а1* () со значением аргу- аеата ЕЕ СОЕОР 1МРЕХЕ5. Индекс результирующего цвета с' = пнп(с, з„), После того как расчет освещенности произведен, значения индексов преобразу- ется в формат с фиксированной запятой (с произвольным количеством битов справа от двоичной запятой).
Далее целая часть индекса маскируется (с помо- звю побитового И) числом 2" — 1, где п — количество битов на цвет в индексном буфере. о .я Смешивание, сглаживание, туман и отклонение После прочтения этой главы вы сможете: ° Смешивать цвета для получения эффекта полупрозрачносги объекта ° Устранять ступенчатость линий и многоугольников ° Создавать сцены с реальными атмосферными эффектами ° Рисовать скругленные (сглаженные) точки с размером, зависящим от расстояния до точки наблюдения ° Рисовать объекты с заданной глубиной без дефектов изображения, возникающих по причине наложения объектов друг на друга Смешивание, сглаживание, туман и отклонение 199 В предыдуших главах мы учили вас создавать сцены компьютерной графики. Значит, на этот момент вы умеете: ° рисовать геометрические объекты; ° преобразовывать их так, чтобы они выглядели правильно с любой точки обзора в нужной перспективе; ~ зздавать их цвет и вид раскраски; ~ добавлять источники света и определять нх воздействие на объекты в сцене.
Теперь вы подготовлены для того, чтобы идти дальше. Эта глава предлагает и рассмотрению пять технологий, позволяющие ввести дополнительные детали тсцеву и придать ей большую реалистичность. Все эти технологии довольно проон — фактически труднее их объяснить, чем программировать. Каждая из них шисывается в своем разделе; ~ Смешивание.
Рассказывает, как определить функцию смешивания, которая комбинирует цвета приемника и получателя. В результате некоторые части сцены оказываются полупрозрачными. е Сглаживание. Описывает технологию незначительного изменения цвета (авт(айаяпд), за счет которой границы точек, линий и многоугольников кажутся более ровными, а не угловатыми и ступенчатыми, Более мощная технология мультивыборки (шц111затрйпя) предназначена для сглаживания любых примитивов в сцене. ~ Туман.
Объясняет, как создать иллюзию глубины, вычисляя значения цветов объекта на основе расстояния до точки обзора. Цель — добиться того, чтобы обьекты, находящиеся далеко, растворялись в фоне, как это происходит в резльной жизни. т Параметры точки. Рассматривает эффективную технологию рисования прииятива точки с размером н цветом, изменяющимися в зависимости от расстояния до наблюдателя. Параметры точки используются в системах частиц— при моделировании дождя, снега и прочего в графических программах. ~ При попытке рисования каркаса поверх закрашенного объекта по тем же вершинам могут возникнуть ненужные артефакты.
Раздел «Отклонение многоугольников по глубине» показывает, как подогнать (отклонить) значения глубины так, чтобы векторный, тонированный объект был неотличим от прототипа. Взддержка девиации многоугольников появилась в ОрепО(. версии 1.1. 3 иерсию 1.2 была введена возможность выбора выражения смешивания (функтм 11В1елоесоаттоп О), константные цвета (В1В1епосо1ог О) и типы смешиЙния: 61 СОМ5ТАМТ СОСОМ, 61 ОМЕ М1М05 СОМ5ТАМТ СОСОЙ, 6С СОМ5ТАМТ яРНА и 61 ОМЕ И1М05 СОМ5ТАМТ АСРНА. В версиях 1.2 и 1.3 эти возможности ктцерживаются, только если реализация включает в себя расширение 1шая1пя 1т1вес Начиная с версии 1.4, наличие выражений смешивания, константных цвеЙз и факторов влияния стало обязательным. Вмрсии 1.3 поддержка мультнвыборки стала частью ядра ОрепОЦ 200 Глава 6 ° Смешивание, сглаживание, туман и отклонение В версии 1.4 также были добавлены следующие возможности, затрагиваемые в данной главе: ° использование 6С 5РС СОСОР и 61 ОМЕ М1МР5 5РС СОСОР в качестве факторов смешивания для источника (до версии 1.4 6С 5йС СОСОР и 6С ОМЕ М1М05 5РС СОСОР были факторами смешивания для получателя); ° использование 6С Р5Т СОСОР и 6С ОМЕ М1М05 Р5Т СОСОР как типов смешивания для получателя (до версии 1.4 6С Р5Т СОСОР и 6С ОМЕ М1МО5 Р5Т СОьОР были факторами смешивания для источника); ° явное определение координат тумана; ° параметры точки для управления характеристиками точечных примитивов; ° возможность смешивания КСВ-компонентов и альфа-канала цвета раздельными функциями смешивания.
Смешивание Что же такое «альфа»? Мы неоднократно употребляли этот термин (или как букву А в аббревиатуре КСВА), но до сих пор не конкретизировали. Альфа-значения указывались для функции к1Со1ог» (), задавались в функции к161еагСо1ог () для определения цвета очистки и использовались при задании некоторых параметров освещения, таких как свойства материала и интенсивность света источника.
В главе 4 говорилось, что пиксел на экране монитора излучает красный, зеленый и синий света, и интенсивность света складывается из значений красной, зеленой и синей составляющих — КСВ. Так каким же образом альфа-значение (А) влияет на рисование в окне на экране? Когда включено смешивание, значение альфа-компонента часто используется для комбинирования значения цвета обрабатываемого фрагмента со значением цвета пиксела, которое уже хранится в буфере кадров. Смешивание происходит после растсризации сцены и разбивки ее на фрагменты, но до того, как конечные пикселы сохраняются в видеобуфере.
Значения альфа-компонента также играют свою роль при выполнении альфа-теста, принимающего или отбраковывагощего фрагмент на основе его альфа-значений. (См. главу 10 для получения дополнительной информации.) В отсутствие смешивания информация о цвете в буфере цвета перезаписывается, и ни о какой прозрачности говорить не приходится. Смешивание позволяет управлять тем, как (и в каком соотношении) сохраненный цвет должен быть объединен со значением цвета нового фрагмента.
И, соответственно, с помощью альфа-компонента можно получить светопроницаемые фрагменты, через которые будет «проступать» ранее сохраненный цвет. Смешивание цвета — основа технологии полупрозрачности, ццфровой композиции и закрашивания. ПРИМЕЧАНИЕ Альфа-значения не определяются в режиме индексации цвета, то есть операции смешивания в этом режиме ие выполняются.