Установка параметрпв освещения осуществляется
подобно тому, как это делалось в предыдущем
уроке. Но здесь мы храним все параметры для
тога, чтобы можно было управлять освещенностью
изображения. Немного позже разработаем диалог, с
помощью которого пользователь программы сможет
изменять настройки освещения, а сейчас введите
коды функции SetLight:
void
COGView::SetLight()
{
//====== Обе поверхности изображения участвуют
//====== при
вычислении цвета пикселов
//====== при учете параметров освещения
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);
//====== Позиция источника освещения
//====== зависит от размеров объекта
float
fPos[] =
{
(m_LightParam[0]-50)*m_fRangeX/100,
(m_LightParam[l]-50)*m_fRangeY/100,
(m_LightParam[2]-50)*m_fRangeZ/100,
l.f
};
glLightfv(GL_LIGHTO,
GL_POSITION, fPos);
/1 ======
Интенсивность окружающего освещения
float
f = m_LightParam[3]/100.f;
float
fAmbient[4] = { f, f, f, O.f };
glLightfv(GL_LIGHTO,
GL_AMBIENT, fAmbient);
//====== Интенсивность рассеянного света
f = m_LightParam[4]/100.f;
float
fDiffuse[4] = { f, f, f, O.f };
glLightfv(GL_LIGHTO,
GL_DIFFUSE, fDiffuse);
//======
Интенсивность отраженного света
f = m_LightParam[5]/100.f;
float
fSpecular[4] = { f, f, f, 0.f };
glLightfv(GL_LIGHTO,
GL_SPECULAR, fSpecular);
//====== Отражающие свойства материала
//====== для разных компонентов света
f = m_LightParam[6]/100.f;
float
fAmbMat[4] = { f, f, f, 0.f };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT,
fAmbMat);
f = m_LightParam[7]/100.f;
float
fDifMat[4] = { f, f, f, 1.f };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE,
fDifMat);
f = m_LightParam[8]/100.f;
float
fSpecMat[4] = { f, f, f, 0.f };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR,
fSpecMat);
//======
Блесткость материала
float
fShine = 128 * m_LightParam[9]/100.f;
glMaterialf(GL
FRONT AND BACK, GL SHININESS, fShine);
//====== Излучение света материалом
f = m_LightParam[10]/100.f;
float
f Emission [4] = { f , f , f , 0 . f } ;
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION,
fEmission) ;
} |