М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 36
Текст из файла (страница 36)
Кроме того, различные поверхности могут вать различные свойства: некоторые отполированы и прекрасно отражают свет х нужных направлениях, а другие — рассеивают фотоны одинаково во все оторопь Большинство поверхностей представляют собой что-то среднее. 164 Глава 5 ° Освещение ОрепСЕ представляет свет так, как будто он разбит ца красную, синюю и зеленую составляющие. То есть цвет источника света характеризуется интенсивностью КСВ-компонентов, а в свойства материала поверхности входят процентные соотношения красной, синей и зеленой составляющих, отражаемых в разных направлениях.
В ОрепСЕ вычисления освещения представляют собой приближение к действительности, но оно дает хорошие результаты и быстро работает. Если необходимы более точные результаты (или другая модель освещения), вы должны все высчитать сами программным способом. Но такая программная реализация довольно сложна, в чем можно убедиться, потратив пару часов на чтение любой книги по оптике. В модели освещения ОрепСЕ свет в сцене исходит от нескольких источников, которыми можно управлять по отдельности.
Часть света доходит из определенного направления или положения, а часть представляет собой рассеянный свет. Например, если включить в комнате электрическую лампочку, большая часть света будет поступать от лампочки, а часть — будет являться отраженным светом от одной, двух, трех или более стен. Этот отраженный свет (называемый фановым, ашЬ1епг) предполагается настолько распределенным, что нет никакой возможности определить его исходное направление; в то же время при отключении источника света он исчезает. Наконец, в сцене может присутствовать общий фон (фоновое освещение, цепега1 ашЬ(епт), свет, который не исходит от определенного источника, то есть как будто он столько раз отражался, что источник его излучения невозможно определить.
В модели ОрепСЕ источники света влияют на внешний вид сцены, только если определены поверхности, поглощающие и отражающие свет. Каждая поверхность может быть задана как материал со своими свойствами. Материал может излучать свой собственный свет (как, например, фары автомобиля), отражать какой-то приходящий свет во всех направлениях или отражать часть приходящего света в определенном направлении (как, например, зеркало или любая другая полированная поверхность). В модели освещения ОрепСЕ свет разбивается на четыре независимые составляющие: фоновое освещение, рассеянный свет, отраженный свет и излучаемый свет. Все четыре составляющие вычисляются независимо, а затем складываются друг с другом. Фоновый, рассеянный, отраженный и излучаемый свет Фоновое рассредоточенное осве1цение — это свет, отраженный окружающими объектами столько раз, что его направление невозможно установить, — он выглядит приходящим со всех направлений.
Освещение комнаты имеет большую часть фоновой составляю~пей, поскольку большая часть света, достигающего глаза, сначала отразилась от множества поверхностей. Для внешнего наблюдателя освещенный дверной проем содержит маленькую общую составляющую, так как большая часть света исходит из одного места, и до тех пор, пока наблюдатель находится вне помещения, отраженная от других объектов составляющая невелика Реальный иир и освещение в ОрепбС 165 Когда фоновый свет попадает на поверхность, он отражается одинаково во всех направлениях. Рассеянный (или диффузный, о11(пзе) свет — это свет, поступающий из одного направления. При прямом падении на поверхность он более яркий, чем при легком ' прикосновении к ней вскользь.
При столкновении с поверхностью происходит отражение диффузного цвета, независимое от направления, то есть яркость света не зависит от местоположения наблюдателя. Любой свет, приходящий из опредеденного места или направления, скорее всего, имеет рассеянную диффузную состзвляюшую. Оираженяый (или зеркальный, зресп1аг) свет приходит из конкретного направмвкя и отражается от поверхности также в определенном направлении. Направзенный лазерный пучок лучей имеет практически 100-процентное отражение от зысококачественного зеркала. Освещенный солнцем металл или пластмасса так' ке имеют высокие коэффициенты отражения, а отражающая способность мела влв ковра практически равна нулю. Отражающую способность можно предстаипъ как блеск (з)пп|пезз). Кроке общего, рассеянного и отраженного цветов материалы могут обладать извиаемым (или эмиссионным, еш1зз1че) цветом, который имитирует свет, исходя' щий от объекта.
В модели освещения Ореп01. цвет самосвечения поверхности зебавляет яркости объекту и не зависит от любых других источников света. Крове того, излучение не вносит дополнительного освещения в сцену. Катя источник света вырабатывает единое частотное распределение, фоновая, Рмсеянная и отраженная составляющие могут быть разными. Так, если в комнаи с белым потолком находится источник красного света, рассредоточенный свет будет ближе к белому, в то время как на объекты попадает красный свет. Орепб1 вщволяет каждой световой составляющей присваивать различные независимые щита.
Цвета материала Согласно модели освещения ОрепС1., цвет материала задается в зависимости от таю, какой процент приходящего красного, зеленого или синего света поверхизсть отражает. Например, абсолютно красный мяч отбрасывает весь приходяВхй красный свет и полностью поглощает зеленый и синий свет. Соответственно, клк посмотреть на этот мяч при белом освещении (которое состоит из одинако, вко количества красного, зеленого и синего света), весь красный сает отразится вбудет виден красный мяч.
Освещенный беспримесным красным светом, он такке выглядит красным. Но, если на мяч посмотреть при абсолютно зеленом свете, вхч будет черным (весь зеленый свет поглощается, а красной составляющей нет, 1о есть ничего не отражается). Кж и источники света, материалы имеют различные фоновые, рассеянные и отРзженные цвета, которые определяют способности материала в отношении анающчвых составляющих света.
При расчетах отдельные компоненты объединяются: фоновый свет и фоновый цвет материала, диффузный свет и рассеивающий 166 Глава 5 ° Освещение цвет, и аналогично коэффициент отражения объединяется с отраженной составляющей. «Фоновое» и «рассеивающее» свойства определяют цвет материала и обычно если не одинаковы, то похожи.
Отражающая способность обычно соответствует белому или серому свету, но так, чтобы наиболее яркие места по цвету совпадали с зеркальной составляющей источника. Представим красную полированную сферу в ярких солнечных лучах. Тогда большая часть сферы будет красной, а самые освещенные точки — белыми. Значения йбВ для источников света и материалов Значения компонентов цвета для источников света означают не то же, что для материалов. Для источника света зти числа зависят от процентной доли к полной интенсивности каждого цвета. Так, если все составляющие (К, С и В) равны 1.0, свет будет настолько белым, насколько это возможно.
Если значения равны 0.5, цвет по-прежнему будет белым, но будет уже половинной интенсивности, то есть серым. Если К С = 1, а В - 0 (красный и зеленый, без синего), свет желтый. Для материалов числа берутся исходя из отражающей способности данного цвета. То есть значения К - 1, С - 0.5 и В - 0 подразумевают полное отражение красного света, половинное — зеленого, и полное поглощение синего света. Иными словами, если свет (1) ОрепСЕ состоит из ЕК, ЕС, ЕВ, а материал (М) имеет соответствующие составляющие МК, МС, МВ, то без учета всех прочих эффектов; отражения свет, доходящий до глаза, рассчитывается как (1К х МК, ЕС х МС, 1.В х МВ).
В то же время, если рассматривать два источника света (К1, С1, В1) и (К2, С2, В2), их компоненты будут просто суммированы, и глаз будет видеть свет (К1 » К2, С1 + С2, В1 » В2). Если какая-то из этих сумм превысит 1 (то есть цвет более яркий, чем может быть отображен оборудованием), она ограничивается 1. Пример: рисование освещенной сферы Для добавления освещения в сцену нужно сделать следующее: 1. Определить векторы нормалей для каждой вершины каждого объекта. Они устанавливают ориентацию объекта относительно источников света.
2. Создать, выбрать и расположить один или несколько источников света. 3. Создать и выбрать модель освещения, которая определяет уровень фонового ~ света и правильное местоположение точки обзора (подходящее для вычисле- ~ ния освещенности). ! 4. Определить свойства материала для объектов в сцене. Программа, приведенная в листинге 5.1, решает эти задачи. Она рисует сферу, ос- ~ вещенную единственным источником света, как показано на рис. 5.1.
168 Глава 5 ° Освещение Листинг Б.1 (продолжение) б1и\Резнарерцпс(ге»наре); а1цтн»1пьоор(): гесцгп Е; ) Вызовы функций, связанные с освещением, находятся в процедуре з и 1' с (). Они вкратце описаны в ближайшем разделе н более подробно — далее в этой главе.
Заметьте, что в листинге 5.1 используется режим РСВА, а не индексации цвета. Вычисление освещенности в ОрепС). различно для двух режимов, и фактически возможности освещения в режиме индексации цвета более ограничены. Поэтому режим РСВА более предпочтителен при работе со светом, и все примеры в этой главе написаны с его использованием. (См. раздел «Освещение в режиме индексации цвета» этой главы для получения дополнительной информации.) Задание векторов нормалей для каждой вершины каждого объекта Нормали определяют расположение объекта относительно источников света Чтобы рассчитать количество света, получаемого вершиной от каждого источника света, ОрепС).
отталкивается от ее нормали. В данном примере нормали для сферы устанавливаются функцией б1цт5о1)б5рлеге О. Чтобы освещенность вычислялась правильно, векторы нормали должны иметь единичную длину. Но это качество по ходу теряется, так как матрица модельновидовых преобразований не масштабирует нормали к поверхности. Чтобы нормали всегда оставались нормализованными, используйте функцию 61ЕпаЬ1е() со значением аргумента 61 МОРИАС11Е или 6С РЕ5САСЕ МОРИАС В режиме 6С РЕ5САСЕ МОРИАС выполняется умножение каждой составляющей нормали к поверхности на одно и то же значение, определяемое из матрицы модельно-видовых преобразований.
Такая процедура правильно работает при условиях, если нормаль до того масштабирована равномерно и изначально была единичной. Режим 6С МОРИАС11Е более универсален, здесь вычисляется длина вектора нормали, а затем каждый компонент делится на полученное значение. Это гарантирует, что нормали останутся единичными, но данный способ более трудоемок, чем простое перемасштабирование нормалей. (См. разделы «Векторы нормали» главы 2 и приложение Д, «Вычисление векторов нормалей», для получения дополнительной информации.) ПРИМЕЧАНИЕ В некоторых реализациях Орепбб в режиме 6С РЕ5САСЕ МОРМАС действительно выполняетсз именно нормализация векторов нормалей, а не обычное масштабирование.
Ио полагаться нз зто не стоит, так как здесь нет способа получить достоверную информацию относительно позе. денна функции, Пример: рисование освещенной сферы 169 Создание, размещение и включение одного или нескольких источников света выбор модели освещения Кхк вы уже могли догадаться, функция к1Е(аптнобе1» () описывает параметры вдели освещения. В листинге 5.1 явно определен только один ее элемент — фоновый рассеянный свет (я1оьа! ахпЬ(епг). Модель освещения также включает в сеЕх местоположение наблюдателя, который может быть локальным или бесконечно удаленным, и то, как выполняются вычисления для передней и задней мверхностей объектов сцены, одинаково или индивидуально. В листинге 5.1 для х(юях параметров приняты значения по умолчанию — наблюдатель находится х(есконсчности, а освещение одностороннее.