Лабораторные работы 1 2 3 5 / ЛАБА3_КГ
.docСанкт-Петербургский государственный электротехнический университет
Кафедра МОЭВМ
Отчет по лабораторной работе №3.
Трехмерное изображение
Выполнил:
Студент гр.3341
Рыжок М.С.
Проверил:
Ларионова О.Г.
Санкт-Петербург
2007г.
-
Задание
На базе предложенного шаблона разработать программу, реализующую представление разработанного вами трехмерного рисунка, используя предложенные функции библиотеки OpenGL (матрицы видового преобразования, проецирование).
-
Выполнение работы
Перенос
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 (Камера вращается вокруг пирамиды на шахматном поле)