Данные, передаваемые в конвейер функцией glColor*( ), можно связать также с другой характеристикой материала. Для этого необходимо вызвать функцию gl Col orMateri al (GLenum face, GLenum mode). Если в качестве первого параметра передать значения GL_FR0NT, GL_BACK, GL_FR0NT_AND_BACK, то будет включен расчет освещения для одной или обеих сторон грани. Вторым параметром указывается компонент материала, с которым связывается текущий цвет, - GL_EM ISSI ON. GL_AMB IENT. GLJ3IFFUSE. GLJPECULAR или GL_AMBIENT_AND_DIFFUSE.
Проект, демонстрирующий освещение материала направленным источником (рис. 22.7), располагается в папке Шар_и_0свещение. В нем при выборе первого пункта меню выводится шар, покрытый сеткой географических координат. Как обычно, он построен на базе скелетного проекта Template и модуля InitGLcpp из проекта 0penGL_minim.
В модуль InitGLcpp добавлены функции создания источника света и определения материала отображением текущего цвета на коэффициент диффузного отражения. Текст модуля с добавленными элементами приведен в листинге 22.15.
Листинг 22.15
#include <windows.h> #include <gl/gl.h> #include"GLDat.h"
HGLRC hGLRC;
float Ambient[4] - {0.4f,0.4f,0.4f.1.Of}: //Рассеянный свет
//Характеристика источника света
float pos[4] - {0.43f.0.5f.-l.lf.0.0f}; //Позиция
float inten[4] - {0.95f.0.95f.0.95f.1.Of}: //Свет для диффузного отражения
Рис. 22.7. Освещение глобуса
void InitLightCfloat pos[4],float inten[4].float intenl[4])
продолжение &
Инициализация библиотек и вывод примитивов
Листинг 22.15 (продолжение)
{
glEnable(GL_LIGHTING); //Включение расчетов освещения glEnable(GL_LIGHTO); //Создание источника света glLightfv(GLJ_IGHTO. GLJDIFFUSE. inten);
gl Li ghtfv(GL_LIGHTO. GL_P0SITI0N, pos); //Позиция определяет направление }
void InitMaterial(void) {
glEnable(GL_COLOR_MATERIAL); //Включение отображения цвета на материал //glColorMaterial(GL_FRONT.GL_SPECULAR)"opengl4_285.html">⇐ Предыдущая| |Следующая ⇒