Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
01.05.2014
Размер:
259.58 Кб
Скачать

Санкт-Петербургский государственный электротехнический университет

Кафедра МОЭВМ

Отчет по лабораторной работе №3.

Трехмерное изображение

Выполнил:

Студент гр.3341

Рыжок М.С.

Проверил:

Ларионова О.Г.

Санкт-Петербург

2007г.

  1. Задание

На базе предложенного шаблона разработать программу, реализующую представление разработанного вами трехмерного рисунка, используя предложенные функции библиотеки OpenGL (матрицы видового преобразования, проецирование).

  1. Выполнение работы

Перенос

void glTranslate[f d]( GLdouble x, GLdouble y, GLdouble z );

При помощи этой команды осуществляется перенос объекта на расстояние х по оси Х, на расстояние у по оси У и на z по оси Z.

Вращение

void glRotate[f d]( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )

Эта команда рассчитывает матрицу для выполнения вращения вектора против часовой стрелки на угол, определяемый параметром angle, осуществляемого относительно точки (x,y,z). После выполнения этой команды все объекты изображаются повернутыми.

Функция Display:

glClearColor(0.7,0.7,0.7,1);

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_DEPTH_TEST);

// Установка камеры

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(0,0,-20);

glRotatef(angle1,1,0,0);

glRotatef(angle1/2,0,1,0);

// Рисование пирамиды по граням

glColor3f(1,1,0);

glBegin(GL_TRIANGLES);

glVertex3f(0, 4, 0);

glVertex3f(-2, 0.7, 2);

glVertex3f(2, 0.7, 2);

glEnd();

glColor3f(0.8,0.8,0);

glBegin(GL_TRIANGLES);

glVertex3f(0, 4, 0);

glVertex3f(-2, 0.7, -2);

glVertex3f(2, 0.7, -2);

glEnd();

glColor3f(0.5,0.5,0);

glBegin(GL_TRIANGLES);

glVertex3f(0, 4, 0);

glVertex3f(-2, 0.7, 2);

glVertex3f(-2, 0.7, -2);

glEnd();

glColor3f(0.8,0.8,0);

glBegin(GL_QUADS);

glVertex3f(-2, 0.7, -2);

glVertex3f(2, 0.7, -2);

glVertex3f(2, 0.7, 2);

glVertex3f(-2, 0.7, 2);

glEnd();

// Рисование шахматного поля

for (int j=-5;j<5;j++)

for (int i=-5;i<5;i++)

{

if ((abs(i+j)%2)==0)

glColor3f(0.5,0,0);

else

glColor3f(0.9,0.9,0.8);

glBegin(GL_QUADS);

glVertex3f(i,0,j);

glVertex3f(i+1,0,j);

glVertex3f(i+1,0,j+1);

glVertex3f(i,0,j+1);

glEnd();

}

glFlush ();

Результат выполнения лабораторной работы показан на рисунках 1 и 2 (Камера вращается вокруг пирамиды на шахматном поле)

2

Соседние файлы в папке Лабораторные работы 1 2 3 5