Ну что? Прикольный телек? Если не понравился - пишите. Я его стукну, он станет фиолетовым в крапинку.
Давайте теперь добавим к нему точечный источник света. Источник разместим в углу с координатами x=1, y=1, z=1, эти цифры мы поместим в массив: GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; , а интенсивность его сделаем такой r=1, g=1, b=1, эти цифры поместим в массивчик GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0};. Как вы догадываетесь - это глобальные переменные. Кроме того в глобальные переменные еще добавим BOOL lp; Нужна она для того, что бы нажимая на кнопочку 'L' на клавиатуре можно было бы включать и выключать свет.
Изменениям, естественно, подверглась функция Initial
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); lp = TRUE;
Функция glLightfv устанавливает интенсивность света и его положение. В OpenGL источники света все наперечет: первый источник GL_LIGHT0, второй GL_LIGHT1 и т.д. У нас только один источник, так что работаем с GL_LIGHT0. Попробуйте изменить, например, значение diffuse на 1.0f, 0.0f, 1.0f, 1.0f, увидите страшный, красный телевизор!.
Для того, чтобы увидеть разницу между освещенным и не освещенным объектом сделаем обработчик клавиши 'L':
case WM_KEYDOWN: if(wParam == VK_ESCAPE) SendMessage(hWnd, WM_DESTROY, wParam, lParam); if(wParam == 'L') { if(lp == TRUE) { glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); lp = FALSE; } else { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); lp = TRUE; } } break;
Думаю, что комментарии тут не нужны.