Библиотеки организуют раздельный учет отражения рассеянного света, диффузного и зеркального отражения направленного света и эмиссионных свойств поверхности. При этом отдельно рассчитывается интенсивность чистых цветов - красного, зеленого и синего. Для каждого чистого цвета в источнике предусмотрены диффузная и зеркальная составляющие, которые задаются функцией д1 ИдМ:*(). В материале задаются коэффициенты отражения чистых цветов, передаваемые конвейеру функцией д1Ма1епа11л/(). Результаты вычисления рассеянного, диффузного и зеркального освещения складываются и к ним прибавляется число, характеризующее свечение грани. При наличии нескольких источников света результаты освещения каждым из них суммируются и ограничиваются максимально возможным значением кода цвета.
Следует помнить, что вместо единого светового потока от одного источника библиотека рассматривает два разных света, которым в источнике можно задать
Инициализация библиотек и вывод примитивов
разные интенсивности. Используется диффузный свет, при отражении которого вычисленный цвет грани умножается на коэффициент диффузного отражения, и зеркальный свет, умножаемый на коэффициент зеркального отражения.
Чтобы определить перечисленные свойства материала, функция gl Materi alfvO имеет два параметра. В качестве первого параметра передается одна из констант - GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GLJMISSION и GLJHININESS, определяющих тип данных. Они задают коэффициенты отражения для рассеянного, диффузного и зеркального освещения, свечение материала и характеристику скорости убывания освещенности при отклонении наблюдателя от оси отраженного светового луча. Вторым параметром передается массив из четырех чисел (RGBA), определяющих коэффициенты отражения для чистых цветов. Параметр типа GL_SHININESS является числом в диапазоне от 0 до 128. При формировании зеркального освещения вычисленный код цвета дополнительно умножается на значение cos*(ß), где ß - угол в вершине между направлением отраженного луча и направлением на наблюдателя, a k - значение параметра типа GLSHININESS. По умолчанию k равен нулю, но в литературе [7] для имитации металлического блеска рекомендуют использовать значения от 5 и выше, формирующие более узкий отраженный луч.