Задание
Включить 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 или выше
- Запустить проект
shogun