Помимо фонового цвета, порожденного отдельными источниками света, можно как глобальную величину задать независимое значение фонового освещения OpenGL. Это дает всего лишь еще одну возможность, используемую при эмпирических вычислениях освещения. Чтобы задать эту опцию, применим символьную константу GL_LIGHT_MODEL_AMBIENT. В следующем выражении, например, задается общее фоновое освещение сцены - слабоинтенсивный (темный) синий цвет, альфа-фактор равен 1,0.

globalAmbient[ ]={0.0, 0.0, 0.3, 1.0 }

glLightModelfv (GL_LIGHT_MODEL_AMBIENT, globalAmbient); Если глобальный уровень фонового освещения не задан, по умолчанию используется слабоинтенсивный белый (темно-серый) цвет (0.2, 0.2, 0.2, 1.0).

Расчет зеркального отражения требует значения нескольких векторов, включая вектор V от точки поверхности к точке наблюдения. Чтобы ускорить расчет зеркального отражения, в процедурах OpenGL используется постоянное направление вектора V вне зависимости от положения точки поверхности относительно точки наблюдения. Данный постоянный единичный вектор идет в положительном направлении оси z, (0.0,0.0,1.0), и это - значение V по умолчанию. В то же время, если требуется отказаться от значения по умолчанию и использовать реальную точку наблюдения (начало системы координат наблюдения), то для расчета V вводится следующая команда.

glLightModeli (GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); Хотя расчет зеркального отражения требует больше времени при использовании реальной точки наблюдения, в результате получаются более реалистичные изображения. Если параметр “локальный наблюдатель” имеет значение по умолчанию GL_FALSE (или 0, или 0.0), расчет поверхности для вектора V опускается.

Если в расчете освещения OpenGL фигурируют поверхностные текстуры, “зайчики” на поверхности могут быть тусклыми, а текстурные узоры искажаться зеркальными членами. Следовательно, как вариант, текстурные узоры могут применяться только к незеркальным членам, которые вносят вклад в цвет поверхности. Данные незеркальные члены включают эффекты фонового освещения, излучения с поверхности и диффузного отражения. Используя эту возможность, процедуры освещения OpenGL генерируют два цвета в каждом цикле расчета освещения поверхности: вклады зеркального и незеркального цветов. Текстурные узоры накладываются только на незеркальный цвет, затем два цвета объединяются. Чтобы использовать описанную возможность ввода двух цветов, вызывается команда

glLightModeli (GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); Если текстурные узоры не используются, разбивать цвет на два члена необязательно, причем, если эту опцию не вызывать, расчет освещения выполняется более эффективно. По умолчанию данное свойство задано со значением GL_SINGLE_COLOR, и цвет зеркального отражения не отделяется от других компонентов цвета поверхности.

В некоторых приложениях может потребоваться отобразить задние поверхности объекта. Пример - вид твердого тела в разрезе, при котором в дополнение к передним поверхностям нужно показать некоторые задние. Впрочем, по умолчанию при расчете освещения наложенные свойства материала применяются только к передним граням. Чтобы применить расчет освещения к передним и задним граням, учтя соответствующие свойства материалов, используется команда


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