OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 37
Текст из файла (страница 37)
Создать, выбрать и расположить один или несколько источников света. 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 для х(юях параметров приняты значения по умолчанию — наблюдатель находится х(есконсчности, а освещение одностороннее. В таких условиях результаты не~колько менее реалистичны, поскольку не принимаются во внимание углы между ючхой обзора и каждым объектом. Если наблюдатель находится рядом со сцемй знание этих углов необходимо, что значительно увеличивает сложность вывкхеннй.
Так как в приведенной программе задняя поверхность сферы никогда и видна (как бы находится внутри сферы), одностороннего освещения вполне вьтаточно. (См. раздел «Выбор модели освещения» для получения подробной ххформации). ~а е. .е ы У 5Вдание свойств материала для объектов в сцене ся на »е- Йойства материала объекта определяют характер рассеивания света, то есть— и какого материала этот объект «изготовлен». Поскольку взаимодействие между В листинге 5.1 используется только один, белый, источник света — 61 116НТЕОь Его положение определяется функцией я \ Е)квтг» (), и соответственно вычисляются рассеивание и отражение.
Если нужен другой цвет источника света, изменихе значения аргументов к1Е1 квт ' () . В сцене может присутствовать до восьми различных источников света произюльвого цвета. (Некоторые реализации Орепоь поддерживают более восьми источников света.) По умолчанию цвет источников, отличных от 6Е Е16НТОь— хервый. Источники можно размещать там, где это необходимо: рядом со сценой (например, настольная лампа) или бесконечно далеко (имитация солнца). Кроме юго, можно управлять толщиной луча — делать его сфокусированным или широхвн. Помните, что добавление даже одного источника света требует значительних вычислений при рисовании, то есть сказывается на производительности. (См, раздел «Создание источников света» для получения дополнительной информации о том, как создать источники света с заданными свойствами.) После определения свойств эти источники света необходимо включить с помощью функции я1Епав1е().
Кроме того, чтобы Орепоь принимал освещение во нввнание, нужно вызвать функцию к1Епэо(е() со значением аргумента 6Е (!6НТ1Н6. (См. раздел «Включение источников света» для получения дополнитаьной информации.) 170 Глава 5 ° Освещение поверхностью объекта и падающим светом довольно сложно, правильное задание свойств материала, дающих нужный результат, — целое искусство. В вашем распоряжении не только фоновый, рассеянный и отраженный пвета материала, но и блеск, то есть насколько хорошо материал отполирован, В обсуждаемом примере явно, с помощью функции к1масег1э1тч (), определяются лишь два свойства— отражение и блеск.
(Для получения информации обо всех свойствах материала и примерах их использования см, раздел «Задание свойств материала» этой главы). Замечания на память При написании собственной программы с использованием освещения учтите, что для одних параметров в самый раз будут значения по умолчанию, а для других их потребуется изменить. Кроме того, не забудьте включить источники света, которые вы определили, и вычисление освещенности. Наконец, помните, что при изменении условий освещенности увеличить эффективность помогают списки отображения. (См. раздел «с))илософия проектирования списков отображения« главы 7.) Создание источников света Источники света характеризуются набором свойств, включая цвет, положение в ! ориентацию.
Ниже описывается, как управлять этими параметрами и каким окажется результирующий свет. Свойства источников света устанавливаются функЦИЕй В111КНС«(). чоЫ к111кпс(Щ(С).епшп ййЬГ, С) епшп Рпате, ТУРЕ ригпт)' чу к111кпс(1()ч(01епп1п ййЫ, С|епшп рпате, ТУРЕ рагат) Создает нумерованный источник света ЙНЬГ, в диапазоне 61 116НТОь 61 116НТХ, ..., 61 116НТТ.
Свойство источника сне~а указывается символическии ~ именем рпите, согласно табл. 5.1. Аргумент рогат — зто собственно значение 1 какого-то одного свойства рлате или указатель на набор значений — в вектор- ) ной версии. ) Использование функции к11(кпг" () продемонстрировано в листинге 5.2. Листинг 5.2. Задание цвета и положения источников света 61(1паг 11ВП( аиьнепт() = ( В.О, В.О, В.О, Х.В ); 61(1рас 11ВП( ОХ((пае() = ( Х.В, Х,О. Х.В, Х.О 61(1раг 1(ВП( «реса)аг() = ( Х.О, Х.В, Х.О, Х.О ), 6(г)паг 11хьт рпз)1)пп() = ( Х.О, Х.О, Х.О, О.О ): В111ВП1(ч(6С 116НТВ. 61 АНВХЕМТ, 1! ВП( аввнепс); В11)аьгтч(61 щбатО, 6Е ОХРРВ5Е, 11ВП1 ОХ((чае); ВХШВПТ(ч(61 116НТВ.
6( 5РЕСВ(АВ, 11аьт «реса)аг); В1ШВЫ(ч(61 СХ6НТО, 61 РО5ХТХОН, 11ВП1 роз)1)оп); Создание источников света 171 Таблица 5.1. Значения по умолчанию для аргумента рпагпе функции О~ВОЩ»П Значения по умолчанию Описание Параметр Цвет фонового освещения Цвет рассеянного освещения 61 АМ81ЕМТ 6! 01ГЕ05Е Цвет отраженного света 6! 5РЕСОСАР 6! Р051Т!ОМ б! 5РОТ 01РЕСТ1ОМ 61 5РОТ ЕХРОМЕМТ 0.0 Я. 5РОТ СОТОГЕ 6! СОМ5ТАМТ АТТЕМОАТ10М 180.0 1.0 61 (ТМЕАР АТТЕМЦАТ10М 0.0 Квадратичное затухание света 6! ООАОЙАТ1С АТТЕМОАТ10М 0.0 Видно, что значения параметров помещены в массивы, а функция 81С(ВПттн() называется несколько раз. В этом примере первые три вызова являются лишни- иа, так как устанавливаемые ими значения 6С АНВ1ЕМТ, 6С 01ЕЕО5Е и 6С 5РЕСОСАР совпадают с предопределенными неявно. ПРИМЕЧАНИЕ Лопните, что каждый источник света необходимо включить с помощью команды 0)ЕпаЫе().
(Для получения более подробной информации о том, как зто сделать, см. раздел «Включение источников света».) В следующих разделах описываются все аргументы функции 81!(ВПС» () и их квиожные значения. Они связаны с моделью освещения сцены и свойствами маириалов объектов. (См. разлслы «Выбор модели освещения» и «Задание свойств взтериала» для получения дополнительной информации по этим двум вопросам Рмдельно н раздел «Математика освещения» на предмет их взаимосвязи.) ОрепЯ.
позволяет ассоциировать с каждым источником света три различных па(виетра цвета; 6С АМВ1ЕМТ, 6С ОТЕЕО5Е и 6( 5РЕСОСАР. Параметр 6С АМВ1ЕМТ вгрзжает интенсивность фонового т»СВА-освещения, которое привносит в сцену (О.О, 0.0, 0.0, 1.0) (1.0, 1.0, 1.0, 1.0) для С16НТΠ— белый или (0.0, 0.0, 0.0, 1.0) для остальных (1.0, 1.0, 1.0, 1.0) для 116НТΠ— белый или (0.0, 0.0, 0.0, 1.0) для остальных (0.0, 0.0, 1.0, 0.0) (0.0, 0.0, - 1.0) Координаты (х,у, а н) источника света Направление (х у, г) распространения света Распределение интенсивности светового пучка по экспоненте Угол разброса световых лучей Ослабление интенсивности света, вне зависимости от направления и расстояния Линейное ослабление интенсивности света 172 Глава 5 ь Освещение какой-то источник света.
Как видно из табл. 5.1, по умолчанию фоновое освещение источника отключено — 61 АН81ЕНТ равно (0.0, 0.0, 0.0, 1.0). Это значение использовалось в листинге 5.1. Если в программу добавить синее общее освещение: 61(1оат 1)8П! авьпепт() = ( 8.0, 8.8. 1.8, 1.8); 81ь(хнгтт(61 116НТ8, 6ь АН81ЕНТ, 1)вы ааь)епг); получится изображение, показанное на цветном рисунке 13.