Иллюстрированный самоучитель по Visual Studio.Net

         

Параметры освещения


Установка параметрпв освещения осуществляется подобно тому, как это делалось в предыдущем уроке. Но здесь мы храним все параметры для тога, чтобы можно было управлять освещенностью изображения. Немного позже разработаем диалог, с помощью которого пользователь программы сможет изменять настройки освещения, а сейчас введите коды функции 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) ;

}



Содержание раздела