Задание
Включить 3 источника света, задать отражающие свойства поверхностей, положение и цвет источников света. Рекомендуется цвет поверхностей сделать одинаковым, а отражающие свойства – разными. Вывести несколько объемных объектов. Источники света должны иметь различный цвет. Необходимо организовать вращение сцены, управляемое с клавиатуры (сцена с объектами объекты вращается, источники неподвижны)
Функционал программы
- Вращение сцены стрелками влево-вправо на клавиатуре
- Включение и выключение источников света на сцене
Содержание отчета к программе
- Задание
- Листинг программы
- Выводы
Фрагмент программного кода
// Главная функция программы
int main(int argc, char *argv[]) {
// Инициализация GLUT
glutInit(&argc, argv);
// Задание размеров окна
glutInitWindowSize(800, 800);
// Задание режима отображения
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
// Создание окна
glutCreateWindow("Лабораторная работа №2");
// Подключение функций-обработчиков:
// - изменения размера окна
glutReshapeFunc(resize);
// - отрисовки кадра
glutDisplayFunc(display);
// - нажатия клавиши клавиатуры
glutKeyboardFunc(press_key);
// - нажатия спец. клавиши на клавиатуре
glutSpecialFunc(press_special_key);
// - простой
glutIdleFunc(idle);
// Задание цвета фона
glClearColor(0.95, 0.95, 0.95, 1);
// Включение глубины
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
// Включение записи в буфер глубины
glDepthMask(GL_TRUE);
// Включение источников освещения
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
// Приведение нормалей к единичной длине
glEnable(GL_NORMALIZE);
// Настройка параметров источников освещения
glLightfv(GL_LIGHT0, GL_AMBIENT, light1_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light1_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light1_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light1_position);
glLightfv(GL_LIGHT1, GL_AMBIENT, light2_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light2_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light2_specular);
glLightfv(GL_LIGHT1, GL_POSITION, light2_position);
glLightfv(GL_LIGHT2, GL_AMBIENT, light3_ambient);
glLightfv(GL_LIGHT2, GL_DIFFUSE, light3_diffuse);
glLightfv(GL_LIGHT2, GL_SPECULAR, light3_specular);
glLightfv(GL_LIGHT2, GL_POSITION, light3_position);
// Основной цикл OpenGL
glutMainLoop();
return 0;
}
Скриншот архива с проектом


Пояснения по запуску программы
- Установить библиотеку FreeGLUT
- Открыть проект в Visual Studio версии 2017 или выше
- Запустить проект
Телеграм
-