Трехмерные графики функций

Что такое драйвер Понять, что такое драйвер, мы попробуем на типовом примере взаимодействия прикладной программы с драйвером.
Код прикладной программы исполняется в пользовательском режиме работы процессора. В этом случае имеется ряд серьезных ограничений, связанных с доступом к памяти, аппаратным обеспечением и привилегированными инструкциями процессора. Когда возникает необходимость в преодолении этих ограничений, прикладная программа обращается к ядру ОС, код которого исполняется процессором в режиме ядра. Режим ядра лишен всех упомянутых ограничений. Для расширения функциональных возможностей ядра служат драйверы ядра (kernel mode drivers). Как они работают? Теоретическая механика Под вызовом драйвера здесь подразумевается не обычный вызов функции, а передача так называемого запроса ввода/вывода.

 

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

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

}

Курс лекций Сопротивление материалов