Построение геометрических тел с помощью библиотеки OpenGL
Построение геометрических тел с помощью библиотеки OpenGL
Приднестровский Государственный Университет им. Т.Г.Шевченко Контрольная работа №3 Тема: «Построение геометрических тел с помощью библиотеки OpenGL». Тирасполь, 2010 г. 1. Цель: Изучить команды поворота, переноса, масштабирования и построения основных примитивов графической библиотеки OpenGL. 2. Задача: Написать программу, рисующую проволочный чайник. При нажатии на кнопки w, s, a, d, [, [ он должен поворачиваться вокруг осей X, Y, Z. 3. Методика решения: Строим проволочный чайник. Определяем кнопки. При нажатии на них изменяем соответствующие углы и перерисовываем чайник. Решение #include <GL/glut.h> #include <stdlib.h> GLint Width = 512, Height = 512; GLdouble alpha = 0, betta = 0, gamma = 0; // углы поворота //Функция вырисовки на экране void Display() { glClearColor(1, 1, 1, 1); glClear(GL_COLOR_BUFFER_BIT); glColor3d(0, 0, 0); glPushMatrix(); glTranslated(5, 5, 0); glRotated(5*alpha, 1, 0, 0); glRotated(5*betta, 0, 1, 0); glRotated(5*gamma, 0, 0, 1); glutWireTeapot(2); glPopMatrix(); glFinish(); } //Функция вызывается при изменении размеров окна void Reshape(GLint w, GLint h) { Width = w; Height = h; // устанавливаем размеры области отображения glViewport(0, 0, w, h); // отрографическая проекция glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, 10, 0, 10, -10, 10); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } // Функция обработки сообщений с клавиатуры void Keyboard(unsigned char key, int x, int y) { #define ESCAPE 27 if (key == ESCAPE) exit(0); if (key == `w') alpha += 0.1; if (key == `s') alpha -= 0.1; if (key == `a') betta += 0.1; if (key == `d') betta -= 0.1; if (key == `[`) gamma += 0.1; if (key == `]') gamma -= 0.1; glutPostRedisplay(); } // Главный цикл приложения void main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB); glutInitWindowSize(Width, Height); glutCreateWindow("True Teapot"); glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutKeyboardFunc(Keyboard); glutMainLoop(); } Результаты
|