Экономическая история советской России
Приднестровский
Государственный Университет
им.
Т.Г.Шевченко
Контрольная
работа №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();
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();
}
Результаты