Code
GLfloat light2_diffuse[] = {0.4, 0.7, 0.2}; //цвет рассеянного излучения источника света
GLfloat light2_position[] = {0.0, 0.0, 1.0, 1.0}; //(x, y, z, w) направление источника направленного света
glEnable(<источник света>); // по умолчанию GL_LIGHT0
glLightfv(<источник света>, GL_DIFFUSE, light2_diffuse);
glLightfv(<источник света>, GL_POSITION, light2_position);
glLightf(<источник света>, GL_CONSTANT_ATTENUATION, 0.0);
glLightf(<источник света>, GL_LINEAR_ATTENUATION, 0.2);
glLightf(<источник света>, GL_QUADRATIC_ATTENUATION, 0.4);
Code
// отключение источника света
glDisable(<источник света>);
GL_CONSTANT_ATTENUATION - постоянная k_const в функции затухания f(d)
GL_LINEAR_ATTENUATION - коэффициент k_linear при линейном члене в функции затухания f(d)
GL_QUADRATIC_ATTENUATION - коэффициент k_quadratic при квадрате расстояния в функции затухания f(d)
Ну и естественно не забываем врубить свет, что то типа такого:
void init (void)
{
glClearColor (0.3, 0.3, 0.3, 0.0); // цвет фона
glEnable(GL_LIGHTING); // рассчет освещения
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); // двухсторонний расчет освещения
glEnable(GL_NORMALIZE); // автоматическое приведение нормалей к единичной длине
}
Дополнительно тут: