Построение геометрических тел с помощью библиотеки 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();

}

Результаты


Построение геометрических тел с помощью библиотеки OpenGL