Данные, передаваемые в конвейер функцией 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">⇐ Предыдущая| |Следующая ⇒