C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 14 - Да будет свет / Open GL / Графика

Шаг 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.
[AD]