OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 32
Текст из файла (страница 32)
Фотон характеризуется положением, направлс нием и частотой/длиной волны/энергией. Фотоны, длина волны которых лежи в пределах от около 390 нм (фиолетовый цвет) до 720 нм (красный цвет), соот ветствуют цветам видимого спектра, они формируют цветовую радугу (фиолето вый, синий, голубой, зеленый, желтый, оранжевый, красный). Однако глаз различает множество цветов, нс включенных в радугу, — например, белый, черный коричневый н розовый.
Как такое может быть? То, что видит глаз, — смесь фотонов различных частот. Реальные источники света характеризуются частотой фотонов, которые они испускают. Идеальный бе лый свет состоит из равного количества фотонов всех частот. Луч лазера обычн беспримесный, и все фотоны имеют одинаковую частоту (а также направление фазу).
В свете от нагриевой лампы больше желтой составляк1щей. Свет большин ства звезп в космосе имеет распределение, зависящее преимущественно от и температуры (излучение абсолютно черных тел). Распределение частот от не скольких источников сложнее. Человеческий глаз воспринимает цвет, когда стимулируются ячейки сетчатки называемые зрительными клетками или колбочками, после удара фотонами. Су шествует три вила колбочек, реагирующих на три различные длины волны света один вид реагирует на красный свет, другой — на зеленый и третий — на синий (У людей, страдающих дальтонизмом, обычно отсутствуют колбочки одного и видов.) Когда смесь фотонов попадает в глаз, колбочки на сетчатке испытываю различную степень возбуждения, в зависимости от нх вида.
Вычисление цвета 147 Так как каждьш цвет воспринимается глазом как уровень возбуждения колбочек фотонами, глаз различает цвета, отличные от спектрального разложения белого цвета призмой или радугой. Например, если послать смесь красных и синих фотонов, в которой фотоны обоих видов представлены одинаково, глаз увидит фуксцвовый цвет мадженту, отсутствующий в радуге'. Другие комбинации дают коричневый, бирюзовый и розовато-лиловый, ни один из которых не представлен в спектре. Монитор эмулирует видимые цвета за счет свечения пнкселов, комбинирующего красный, зеленый и синий цвета в пропорциях, стимулирующих колбочки сетчатки в той мере, чтобы получился желательный цвет.
Если бы у человека было больше видов колбочек, например некоторые были бы чувствительны к желтому цвету, то тогда цветные мониторы имели бы желтую пушку и графическое оборудование использовало бы модель КСВ т' (гег), йгееп, Ыце, уе!1оцг — красный, клевый, синий, желтый). А если бы мы все являлись одинаковыми дальтоникаин, зта глава была бы намного короче. Ддв отображения нужного цвета монитор испускает нужную часть красного, зеленого и синего света (НСВ), чтобы в глазу стимулировались колбочки различных видов.
Цветной монитор может объединять красный, зеленый и синий цвета з различных пропорциях, формируя миллионы оттенков, различаемых глазом. ПРИМЕЧАНИЕ Существует множество других представлений цвета (цветовых моделей), например Ньб, Н5Ч я Смук. Если они когда-нибудь вам понадобятся, то понадобится и преобразовать цвета из/в йбб.
Формулы дпя преобразования описаны в книге: Го!еу, кап Пав, ет. а1., Сошрцсег Стар)«1сч: Рппс!Р)ез аоб Ргасбсе (Ас!б!жзп — чуев(еу, 1990). Сюзанное верно для восприятия глазом комбинации фотонов направленного света. Ситуация для света, отраженного от материалов и попавшего в глаз, более о«ожвая — например, белые лучи, отражаясь от красного мячика, становятся х)всныыи, а желтые, освеща«ощие синий стакан, кажутся черными.
(См. раздел «Реальный мир и освещение в ОрепС1» главы 5, где рассматривается этот эф- фект.) Вычисление цвета На цветном экране компьютера оборудование заставляет каждый пиксел экрана юдучать красный. зеленый п синий свет различной интенсивности. Зги зна- ' 3 компьютериои литературе последних лет повелось иа«ывать зги цвета «голубым» и «пурпурвмк». Поскольку комю ютсриая графика была компьютерной графикой еше во времена ССА-моииаров, соогвстствукниис названия цветов «цнаи» и «малжеита» вошли в обиход в го же время. Но ЦОВ зиачеи«ш»пшжсизы (Охр! ООГЕ) вовсе исто же, что НСП шючсиш г!»ал1иг«юи««ого пурпурною цвета (Охз00080), и яия югично для 1«пвил и голубого, иозтииу и в дпииои переводе фигурируют врпвмчиые для «компьютерщиков термины.
Если в плане визуального яосприяпш пурпурный и шдаеита ешс более и ш испсс ипхижш зо лизи намного ближе к зю«ггь«ариг«у, чем к гплуоому иие- П. — Пил пег, яг'лг« 148 Глава ч ° Цвет чения интенсивности обозначаются К, С и В. Часто они упаковыва)отея вместе (иногда с четвертым значением Л, называемым альфа-компонентом), а упакованное значение обозначается буквами КСВ (или КСВЛ). (См. раздел «Смешивание» главы 6, где смысл альфа-составляющей объяснен подробно.) Информация о цвете каждого пиксела может храниться в режзме /сбВ/(, когда определяются значения К, С, В и, возможно, А, или в режиме индексиуовинныг цветов, в котором единственное число, называемое индексом цвета, характеризует цвет каждого пиксела. Каждый индекс цвета указывает на запись в таблице, где определены значения К, С и В для каждого индекса.
Эта таблица называется цветовой палитрой. В режиме индексации цвета можно изменять значения цветовой карты (палитры). Но так как цветовые карты управляются оконной системой, команд ОрепСЕ для этих целей не предусмотрено. Все примеры в данной книге инициализируют режим отображения цвета во время открытия окна с помощью команд библиотеки СШТ (см. приложение Г для получения дополнительной информации). Количество пикселов в массиве и число цветов, которые в состоянии отобразить каждый пиксел, зависит от используемого графического оборудования. В любой графической системе каждому пикселу соответствует область памяти для хранения цвета. А вся эта память называется цветовым буфером.
Размер буфера, зависяший от компьютера, обычно измеряется в битах, и восьмибитный буфер может хранить 8 бит данных (256 возможных различных цветов) для каждого пнксела. (См. главу 10 для получения более подробной информации.) Значения К, С и В могут изменяться от 0,0 (нет) до 1,0 (максимальная интенсивность).
Например, сочетание К - 0,0, С - 0,0 и В = 1,0 представляет максимально возможно яркий синий цвет. Если К, С и В равны 0,0, пиксел имеет черный цвет; если они все равны 1,0, пиксел рисуется самым ярким белым цветом, который только может быть отображен на экране. Смешивание зеленого и синего даст циановый оттенок. Комбинация синего и красного — мадженту. Красный и зеленый дадут желтый. Для того чтобы вам было легче получать нужный цвет из Кч С- и В-составляюших, посмотрите на цветовой куб на цветном рисунке 12.
По осям куба отложена интенсивность красной, синей и зеленой составляюших. Черно. белый вариант куба показан на рис. 4.1. Для задания цвета объекта (в данном случае точки) мо)уг использоваться команды, приведенные ниже: й(со) З(Д .В. О.О, Э.О); /' текущий ййв-цвет — красный; */ /* чистый красный, нет зеленого и синего '/ й(Вез(п(йс РОГМТ5); В(Чегтехзтч(ро(пт аггау)( й(спо(); В некоторых режимах (например, если включено вычисление освещенности или текстур) заданный цвет может изменяться другими операциями перед тем, как будет записан в видеобуфер в качестве цвета пиксела. Фактически цвет пиксела определяется в результате последовательности операций. Вычисление цвета 149 Зеленый елтый Гс Черный елый Красный Синий Пурпурный Рис. 4.1.
Цветовой куб а черно-белом варианте В начале выполнения программы режим отображения цвета задается как ВСВА алн режим итшексации цвета. Режим, установленный один раз, не может быть изиевен. После запуска программы цвет (индексы цветов или значения КСВА) определяется для каждой вершины каждого геометрического примитива.
Этот цвет, клн включено освещение, определен из взаимодействия матрицы преобразомлнй н нормалей к поверхностям и остальных свойств материала. Другими сломки, красный мяч с синим световым пятном отличается от красного мяча без асаещения. (См. главу 5 для получения дополнительной информации.) После анчисления освещения применяется выбранная модель закраски. Как описано ц разделе «Задание цветовой и полутоновой моделей», можно выбрать сплошную мкраску или с плавными переходами, по-разному влияющую на окончательный цвет пнкселов. Затеи производится расте)тизаггия примитива — его преобразование в двухмераае точечное изображение.