glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIF FU S E, diffuseCoeff);

glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, specularCoeff);

glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 25.0); Компоненты коэффициентов отражения также можно задать с использованием кодов таблицы цветов, и для этой цели в OpenGL вводится символьная константа GL_COLOR_INDEXES. Индексы таблицы цветов задаются в форме трехэлементного массива целых чисел или величин с плавающей запятой, значения по умолчанию - (0, 1, 1).

МОДЕЛЬ ОСВЕЩЕНИЯ OpenGL

В OpenGL эффекты освещения поверхности вычисляются с использованием базовой модели освещения (10.19) с некоторыми вариациями способа задания параметров. Уровень фонового освещения является суммой компонента фонового освещения, соотнесенного с источником света, и заданного глобального уровня фонового света. В расчете диффузного отражения используются компоненты света источников, отвечающие за интенсивность диффузного отражения, а вычисления зеркального отражения основываются на зеркальных компонентах света.

Кроме того, единичному вектору V, задающему направление от точки поверхности к точке наблюдения, можно присвоить постоянное значение (0.0, 0.0, 0.0), если не используется наблюдение с позиции локального наблюдателя. Для источника света, расположенного “на бесконечности”, единичный вектор направления света L и веюгор хода лучей от источника противоположны.

АТМОСФЕРНЫЕ ЭФФЕКТЫ OpenGL

Применив для получения цветов поверхности модель освещения OpenGL, можно указать цвет атмосферы на сцене и объединить цвета поверхности с цветом атмосферы. Кроме того, для имитации наблюдения сцены через замутненную или дымную атмосферу можно использовать функцию атмосферного затухания. Различные атмосферные параметры задаются с использованием функции gl Fog, представленной в разделе 9.14:

glEnable (GL_FOG);

glFog* (atmoParameter, paramValue); Чтобы указать тип данных, к функции добавляется код-суффикс i или f, при использовании векторных данных дополнительно добавляется суффикс v.

Чтобы задать цвет атмосферы, параметру atmoParameter присваивается значение символьной константы GL_FOG_COLOR. Например, можно указать, что атмосфера имеет голубовато-серый (стальной) цвет:

GLfloat atmoColor [4] = 0.8, 0.8, 1.0, 1.0;

glFogfv (GL_FOG_COLOR, atmoColor); По умолчанию цвет атмосферы черный (0.0, 0.0, 0.0, 0.0).

Далее можно выбрать функцию атмосферного затухания, которая будет использоваться при объединении цвета объекта с цветом атмосферы. Чтобы это сделать, применяется символьная константа GL_FOG_MODE:

glFogi (GL_FOG_MODE, atmoAttenFunc); Если параметру atmoAttenFunc присвоено значение GL_EXP, в качестве функции атмосферного затухания используется уравнение (10.31). При значении GL_EXP2 функция атмосферного затухания задается согласно уравнению (10.32). Для любой экспоненциальной функции значение плотности атмосферы задается следующим образом^

glFog (GL_FOG_DENSITY, atmoDensity); Третья возможность при выборе атмосферного поглощения - использовать линейную функцию затухания с глубиной (раздел 9.13). В данном случае параметру atmoAttenFunc присваивается значение GL_LINEAR. По умолчанию значение параметра atmoAttenFunc - GL_EXP.


⇐ вернуться назад | | далее ⇒