М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 42
Текст из файла (страница 42)
О.В); /' здесь рисуем объекты '/ 1!Са1огнвтег!а1(6( РМОМТ, 6( 5РЕСОЕАй); Р функция й1Со1ог' больше не меняет диффузный цвет, ' теперь она изменяет отраженный цвет '/ 1!Са1огзт(0.9, В.О, 0.2); Р здесь рисуем другие обьекты "/ ЕИ!ваше(6!. СО!.Ой МАТЕй!АИ; Используйте функцию я1СО1огиа1ег! а1 () в тех случаях, когда для большинст- м вершин на сцене требуется подстраивать значение лишь одного параметра ма- призла.
Если изменяемых параметров несколько, как это было в случае с цвет- ймч рисунком 16, применяйте функцию я1Иатегза1*(). При исчерпании потребности в функционачьности й1СО1огнатегта1() обязательно убедитесь, ето данный механизм отключен командой й10 ! 5 аь1е () . Тем самым вы избежите дзменений свойств материала «по неустановленным причинам», а также снизите птраты в плане производительности. Быстродействие приложения при работе с механизмом й1СО)огИатег ! а1() зависит от реализации Орепб!.. Некоторые зезлнзации могут оптимизировать обработку вершин с целью ускоренного изме- нения свойств материала на основе текущего цвета. Пример, приведенный в листинге 5.9, представляет собой интерактивную про- (рамму, использующую функцию й1СО1огИатег1а1() для изменения свойств нттериала.
Нажатие любой из трех кнопок мыши изменяет рассеянный цвет. Листинг $.9. Применение функции 9(СО!ОРМа(ег!а(о: со(оггпа(.с ,ЕИ1аа! бтттизеивтег! в!(4! = ( О. 5, О. 5, О. 5, 1. 0 ); та)а ! и ! т (чо! и) ! 6Ш1овт шв! зреси1аг(! = ( 1.0, 1.0, 1.0, 1.0 6!Г!ов! 1тйнт роз!!топ(! = ( 1 О, 1 О, 1 О, О О ); 5161еагсо1ог(В.В, 0.0, 0.0, 0.0): 515нвиеноие!(ОС 5НООтН); й!Епвще(6( ОЕРТН ТЕЕТ); Е!Нвтег!в)тч(6! РйОМт, 6! 01РРОЕЕ, бтттизенв!егтв!); 51нзтег1в1(ч(6Е РйОМТ, 6! 5РЕСОЕАЙ, мвт зреси1аг); 51нвтег!а1((61 РМОМТ, 6! 5Н1М1МЕ55, 25.0); 51Ш йнттч(6! (16ИТО, 6! Р051ТХОМ, 1твн! роз!!топ); 51Епвще(6( (16НТ!М6); 51Епвше(6( (16НТО); Енса(огнатег!в1(6( РМОМТ, 6( 01РРОЕЕ); Е!Епаше(6( СО(Ой НАТЕй)АС); ! продолжение .Р Математика освещения 191 Ее(ао11: Ьгеах') !п( па!и(!пт агас, сваг'" агвч) 91»11п!!(аэгас, агхч); 91ч(1п!10!»р1ауноое(6(от 51Н6(Е ! 6(ВТ а6В ~ 6(ОТ 0ЕРТН); а)и(!п!ГН!ппо»5!ге(599. 500); 51»11п1(Н!пеочРо»!1!оп(199, 109); а)чгсгеаген!ппоп(агхч( 0 ) ); !и!(О; 51010!»р1аугопс(Е!»01ау); 5101аезьарерипс(ге»варе); 51чгнпи»еЕчпс (пои»е); 91чгна! псоор(); гегпгп 9; Упражнение Модифицируйте программу в листинге 5.8 следующим образом: » Измените общее освещение сцены.
Подсказка: используйте параметр 6Е (16НТ НОВЕЕ АНВ1ЕНТ. ° Измените рассеянный, фоновый и отраженный цвета, блеск и цвет излучения. Подсказка: используйте функцию я1На 1е г ! а1* (), но не злоупотребляйте е!о. ч Примените двухсторонний материал и добавьте пользовательские плоскости отсечения таким образом, чтобы видеть сферы «изнутри» и «снаружи». (См. раздел «Дополнительные плоскости отсечения» главы 3.) Подсказка: включите двухстороннее освещение с помощью 6Е Е16НТ НОВЕЕ Т)(0 510Е, установите нужные свойства материала и добавьте плоскости отсечения.
° Вместо вызова функции 61натег! 91(ч О для установки значения параметра 6( 0(РЕО5Е используйте более эффективный вызов функции 81601огнатег ! а1О с сохранением той же освещенности сцены. Математика освещения 3 агом разделе представлены уравнения, привлекаемые Орепб). для расчетов осищенности, чтобы задать цвета в режиме ВОВА. (См.
раздел «Математика освещения в режиме индексации цвета» для получения информации о соответствующих вычислениях.) Вам не нужно читать этот раздел, если вы хотите добиться щ!ределенного освещения экспериментальным путем. Даже со знанием этих )равнений вам наверняка придется экспериментировать, но вы будете иметь лучщее представление о том, как значения определегшых параметров влияют на цвет ир!пины.
Помните, что если освещение выключено, цвет вершины просто приаакает значение текущего цвета, если же освещение включено, расчеты, связанаые с ним, производятся в видовых координатах. 192 Глава 5 ° Освещение В следующих уравнениях математические расчеты производятся отдельно для К-, С- и В-компонентов цвета. Таким образом, если в уравнении складываются три величины, следует понимать, что значения К, С и В складываются друг с другом попарно, формируя результирующий КСВ-цвет (К1+ Кг + Кз С~ + Сз + Сз В, + В, + В,).
Когда же три величины перемножаются, результатом будет цвет (К,К1КяС,С,Сь В,В,В;). (Напомниль что значение альфа-компонента цвета вершины равно значению альфа-компонента цвета рассеивания материала этой вершины.) Цвет освещенной вершины вычисляется следующим образом: цвет вершины - излучаемый цвет материала вершины + общий фоновый цвет, масштабированный согласно значению фонового цвета материала вершины + + фоновые, рассеянные и отраженные составляющие всех источников света, ослабленные должным образом [1осле расчета освещенности значения цветов приводятся (в режиме КСВА) к диапазону [О, 1).
Не забудьте, что ОрепС) не принимает в расчет возможность того, что один объект может загораживать свет для другого и, как следствие, автоматически не отбрасываются тени. (См. раздел «Тени» главы 14 для получения информации о технологии создания теней.) Также учтите, что в ОрепСЪ самосветящиеся объекты не освещают другие объекты. Излучение материала Об излучаемой составляющей спйзз1оп„х,„„, достаточно сказать только, что это КСВ-значение, присваиваемое параметру 6ь ЕМ15510М. Масштабированный общий фоновый свет Второй составляющей уравнения является значение, вычисленное путем перемножения общего фонового света (определенного параметром 6Е Ь?6МТ М00Ег АМВ1ЕМТ) на значение фонового цвета материала (6Е АМВХЕМТ, заданного функцией а1Матег1а1'()): атЪ|епь,м „„,„„, х ашЪ1епг„,х„„а Каждая пара значений К, С и В для этих двух параметров перемножается независимо, формируя результирующий КСВ-цвет данной составляющей: (К, К,, С,С„В, В,).
Вклады от источников света Каждый источник света может вносить свой пай в освещенность вершины, и все эти взносы от всех источников суммируются. Далее приведено уравнение, по которому выполняется вычисление вклада от каждого источника света: вклад = коэффициент ослабления х влияние прожектора х х (фоновая составляющая + рассеянная составляющая + + отраженная составляющая) Математика освещения 193 .
'АОзффициент ослабления фактор ослабления был рассмотрен в разделе «Положение и ослабление». Форвулу мы приведем повторно: 1 коэффициент ослабления = Д, «-Д,с(+ Д„И где й — расстояние от источника света до вершины, В,. — 61 СОМ5ТАМТ АТТЕМОАТ10М, ч- 61 С1меАК Аттемцлт10м, ૠ— 6с ООАОМАт1с АттемОАт10м. Если источник света является направленным, коэффициент затухания равен 1. Зффект прожектора Зффект пролгехтора (зрог11яЬ1 е((ест — в формуле) выражается в добавлении одиао из трех значений в зависимости от того, является ли в действительности иствчвик света прожектором и находится ли вершина внутри или снаружи конуса юлучения прожектора: ° 1, если источник не является прожектором (параметр 61 5РОТ СОТОРР равен 180.0); ~ О, если источник света является прожектором, но вершина лежит вне его конуса излучения; ю (шах (ч П, 0))с'-»еот-кхго"ввт, где ч = (п„оп и,) — единичный вектор из прожектора (6Е Р051Т1ОМ) в вершину, О = (Ы„, «1„, Ы,) — ориентация прожектора (61 5РОТ 01КЕСТ10М) при условии, что источник света является прожектором и вершина находится внутри его конуса излучения.
Скалярное произведение векторов ч и О меняется в соответствии с косинусом угла между ними; таким образом, объекты на линии освещения получают максимум освещенности, на объекты вне этой линии света поступает меньше, в соответствии с косинусом угла. Чтвбы выяснить, лежит ли вершина внутри конуса излучения прожектора, ОрепС). шчвсляет значение (шах (ч О, О)), где ч и о определены аналогично.
Если эта вежчвна меньше косинуса угла при вершине конуса излучения прожектора (61 ЯОТ СОТОРЕ) — вершина находится вне конуса излучения, в противном случае ма попадает внутрь конуса. ФОновая составляющая Зтот член уравнения представляет собой фоновый цвет источника, умноженный ' ж фоновый цвет материала вершины: мвЬ!епсмм х аш)йепс„,в„,ь» Рзссеянная составляющая Диффузный компонент необходимо принимать в расчет независимо от того, латает ли свет непосредственно на вершину или нет.
Он вычисляется как 194 Глава 5 ° Освещение (гиах (с . и, 0)) х |ййпзе „„„„х Ййпзе„,я,„,п, где С = (С„, С„, С,) — единичный вектор, указывающий из вершины в направлени положения источника света (6С Р051Т10Н), и - (и„и„, и,) — вектор нормали едн пичной длины к вершине. Отраженная составляющая Зеркальная составляющая также зависит от того, падает ли свет непосредственн на вершину. Когда С .