OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 38
Текст из файла (страница 38)
Параметр 6Е 01РР05Е приближен по значению к обычному естественному «цвету света». Он определяет КСВА-цвет рассеянного освегцения, вносимого в сцену некоторым источником света. По умолчанию значение 61 01РГ05Е равно (1.0, 1.0, 1.0, 1.0) для 6Е 116НТ8, что соответствует яркому белому свету, как показано на цветном рисунке 13. Для всех прочих источников света (61 116НТ1, ..., 61 116НТТ) значение по умолчанию равно (0.0, 0.0, 0.0, 0.0).
Параметр 61 5РЕСОЕАР задает цвет отраженного света объекта. Обычно реальные объекты, такие как стеклянная бутылка, в своей наиболее освещенной части выдают блик, то есть имеют цвет отражаюгцегося от них света (часто это белый цвет). Поэтому при создании реалистичных сцен 61 5РЕСШАН приравнивается 6Е 01РЕ05Е. По умолчанию значение 6Е 5РЕСОЕАР равно (1.0, 1.0, 1.0, 1.0) для 61 116НТ8 и (0.0, 0.0, 0.0, 0.0) для всех остальных источников света. ПРИМЕЧАНИЕ Альфа-компонент не используется до тек пор, пока не включено смешивание (см. главу б).
До этого момента его можно смело игнорировать. Положение и ослабление Как было сказано ранее, можно выбирать между источником света, который бесконечно удален от сцены, и между источником, расположенным рядом с ней. Источник первого типа называют направленным. При бесконечном удалении можно считать, что лучи света от него при падении на объект параллельны друг другу, Примером направленного источника света в реальном мире является солнце. Источники второго типа называют позиционнььни, так как положение такого источ. ника качественно влияет на сцену, и в особенности направление, откуда приходят световые лучи. Настольная лампа — пример позиционного источника света. Различия между направленным и позиционным источниками света показаны на цветном рисунке 13.
Источник света, используемый в листинге 5.1, является направленным: 61(1оат 1)янт роз)1)оп() = ( 1.0, 1.0, 1.0. 8.8 ); 81Ь(анстт(61 Ь16НТО, 61 Р05!Т10Н, 1звь! Роэ!т!оп); Видно, что для параметра 6Е Р051Т10Н определяется вектор из четырех значений (х, у, г, гв). Если последнее значение, гв, равно нулю, имеет место направленный источник света, а координаты (х, у, г) описывают его ориентацию, Эта ориентация преобразуется молельно-видовой матрицей.
По умолчанию значение параметра 6Е Р051Т10Н равно (О, О, 1, О), то есть в сцену вводится направленный источник света, причем направленный в сторону отрицательных координат а Создание источников света 173 (Кстати, ничто не запрещает нам создать направленный источник света (О; О; 0), ' ю смысл в этом напрочь отсутствует.) Если значение те не равно нулю, задается позиционный источник света, а значе. аия (х, у, з) определяют его положение в однородной системе координат объекта (си. приложение Е). В последующем положение преобразуется модельно-видоюй матрицей и сохраняется в координатах наблюдателя.
(Для получения доползктельной информации см. раздел «Управление положением и направлением исзочннков светая.) Также по умолчанию позиционный источник света излучает во ксх направлениях, но ограничить разброс лучей конусом можно, если сделать ' пот источник света «прожектором». (Для получения более подробной информаЕии по данном вопросу смотрите следующий раздел.) 'ПРИМЕЧАНИЕ Помните, что цвета лицевых многоугольников с градиентной заливкой определяются цветами мршин. Поэтому часто большие многоугольники несовместимы с локальным освещением. Так, зглк расположить источник света рядом с центром многоугольника, не исключено, что дальние вершины не получат достаточно света, то есть многоугольник будет выглядеть более темным, чен мы от него ждем.
Для решения этой проблемы нужно разбить большой многоугольник на несколько более мелких. 1(зя реальных источников света интенсивность освещения падает с увеличением (всстояния до источника. Поскольку направленный источник располагается бесЕюиечно далеко, ослабление для пего априори отключено. Однако для локального зпочника света оно может потребоваться. ОрепСЕ реализует ослабление интендшноши источника света, умножая вклад этого источника на коэффициент осззбления: 1 коэффициент ослабления = нс ) т кс,(7 ' )йе д — расстояние от источника света до вершины, Й, — 6Е СОМ5ТАМТ ()ТТЕМОАТ10М, Й~ — 6Е Е1МЕАМ АТТЕМОАТ10М, Й« — 6Е ООАОМАТТС АТТЕМОАТ10М. По умолчанию к, равен 1, а й, и (з„равны нулю, но любой из коэффициентов может еть другое значение; 1)ыепст<6е Е16нто, 6е соизтлит Аттеивлт)ои, г.о>, 1)ыеыт16е е16нтв.
6е е1мела АттемОАт10м, 1.е); 1ыззст(6Е Е16НТО, 6Е ООАОМАТ16 АТТЕМОАТ10М, 8. 5); тите внимание, что ослаблять допускается фоновую, рассеянную и отражен- составляющие, но никак не излучение и общий фоновый свет. Также заметь- (а что раз ослабление требует дополнительных математических операций— ения для каждого вычисляемого цвета, то оно может ухудшить производиьяость приложения. рожекторы 41ке говорилось, что можно вынудить источник света действовать как прожекдор, ограничив испускаемый свет конусом. Чтобы получить прожектор, нужно 174 Глава 5 ° Освещение задать размах этого конуса.
(Помните, что, поскольку прожектор является позиционным источником света, его необходимо расположить в требуемом месте. Кроме того, Орепб). нс мешает нам создать направленный прожектор, но это действие не оправдано с точки зрения смысла.) Для задания угла между осью конуса и луча по краю конуса используется параметр 6Е 5РОТ СОТОРР. Размах конуса равен удвоенному этому значению, как показано на рис. 5.2. Рис.
5.2. Параметр 66 5РРТ СПТОРЕ Свет не выходит за границы конуса — чего мы и ждали. По умолчанию величина 6С 5РОТ СОТОГЕ равна 180.0. Это означает, что свет испускается во всех направ- . лениях (размах в вершине конуса равен 360'). За исключением этого специально- . го значения 180.0, допустимые значения лежат в диапазоне 10.0, 90.0'). Следуюгцая команда ограничивает направление распространения света от источника углом 45'. В)Е)ВЫГ16Е Щ6НТВ, 6Е 5РОТ СЗТОРР, 45.В); Кроме того, необходимо задать направление освещения, то есть ось светового конуса: 6ЕГ1оаг прот сц гесс)оп ) ] = ( -1. В, -1. О, В.
0 ); 61Е)ВПСГР 16Е Е16НТВ, 6Е 5РОТ О1ЯЕСТ10й, зоог о!гесс)оп),' Направление указывается в ксюрдинатах объектов. По умолчанию это (0.0, 0.0, — 1.0), то есть когда режим 6Е 5РОТ 01кЕСТ10Й не включен, свет распространяется вдоль отрицательной оси к Помните, что направление впоследствии преобразуется модельно-видовой матрицей так же, как и векторы нормалей, а результат сохраняется в видовых координатах. (Для получения дополнительной информации об этих преобразованиях см.
раздел «Управление положением и направлениея источников светам) Помимо размаха и ориентации, существует еще два способа управления интенсивностью распределения света в конусе. Во-первых, можно ввести в действие ' коэффициент ослабления, описанный ранее, умножаемый на интенсивность све- ) та.
Кроме того, есть параметр 6Е 5РОТ ЕХРОЙЕЙТ, по умолчанию равный нулю, Создание источников света 175 управляюсций концентрацией светового пучка так, что интенсивность света больше на оси конуса и ослабляется к границам. Коэффициент ослабления равен косинусу угла между направлением света и направлением от источника света к осин(асмой вершине, возведенному в степень (показатель экспоненты). Таким ' образом, болыпий коэффициент 6С 5РОТ ЕХРОМЕМТ соответствует более сфокускрованному источнику света.
(Для получения дополнительной информации о вычислении освещенности см. Раздел «Математика освещения».) Несколько источников света Кок уже было отмечено, на сцене могут присутствовать до восьми источников сита (или больше, в зависимости от реализации ОрепСЕ). Поскольку Орепо1. с]нбуется вычислить, сколько света получает каждая вершина от каждого источвика, увеличение числа источников света весомо влияет на быстродействие. Константы, ссылающиеся на восемь источников света, — это 6Е Е16НТ9, 6Е Е16НТ1, 6[ С]6НТ2, 6Е Е]6НТЗ и т.
д, Ранее нами устанавливались параметры для источника 6Е Е]6НТ9. Если требуются дополнительные источники света, необходимо сн(ать н их свойства, которые по умолчанию не совпадают со свойствами 6 ИЕНТО. В листинге 5.3 задается белый прожектор с затуханием. Листинг Б.З. Второй источник света СИ!оас !СХПС1 аав(епс[] = ( 9.2, 9.2, 9.2, 1.0 ЕИ!оас !!9ПС1 О((гное[] = ( 1.8, 1.9, 1,8, 1.9 ); 5(ноас !19ПС1 оРеси!аг[] = ( 1.0, 1.8, 1.0, 1.0 ОСС!оас !(9ПС1 роз(ссоп[) = ( -2.0, 2.0, 1.0, 1.0 ); ЯС(!о»С орос Отгесс1оп[] = ( -1.9, -1.8, 0.0 ); 1!С(СНС(»(6Е МОНТ!. 66 АНВ]ЕМТ, !(9ПСС аеЬ(епс); 1\С!СШС»(6С С16НТ1, 6С 01ЕР05Е, !]ХНС1 01(газе); 1!С!Со!С»(6С С]6НТ1, 6С 5РЕСОСАН, 1(9ПС1 оресо!аг); 11ЫСШС»(6С С16НТ1, 6С Р051Т10Й, 1!КПС1 ро»1С(оп); 1!С!Со! С(6С С16НТ1, 6С СОМ5ТАЙТ АТТЕМОАТ!ОМ, 1.5); 1!1]сос ((6[ с!6нт1, 6с с1неАМ АттемнАт10м, О.
5); 1]С]спсс(6С С16НТ1, 6С ООАОМАТ]с АТТЕЙОАТ10Й, 8.2); 1!ССЕШГ(6С С16НТ1, 6С 5РОТ СОТОЕР, 45.0); 1!С!Ее!С»(6С С16НТ1, 6С 5РОТ 01МЕСТ10М, вроС Е(гесс(оп); 1!С!Со!С(6С С16НТ1, 6С 5РОТ ЕХРОМЕМТ, 2.0); 1!Епаще(6С С16НТ1); Есдн зтн строки добавить в листинг 5.1, сфера окажется освещена двумя источ- икканн; одним направленным и одним прожектором. )(прзжненне йонсннте листинг 5.1 следующим образом: «сделайте первый источник света цветным позиционированным, вместо белого направленного; 176 Глава 5 ° Освещение ° добавьте дополнительный цветной прожектор. Подсказка: используйте код, аналогичный коду из предыдущего раздела; ° оцените, как эти изменения влияют на производительность, Управление положением и направлением источников света Орепо]. работает с положением и направлением источника света так же, как обращается с геометрическими примитивами. Другими словами, источник света является субъектом тех же матричных преобразований, что и примитив.