Шаг 14 - Да будет свет

Ну что? Прикольный телек? Если не понравился - пишите. Я его стукну, он станет фиолетовым в крапинку.

Давайте теперь добавим к нему точечный источник света. Источник разместим в углу с координатами 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;

Думаю, что комментарии тут не нужны.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Kirill V. Ratkin - 10.03.2000