14573

Модель разноцветного куба. Способы получения плоских проекций трехмерных объектов. Задание положения и ориентации камеры

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №4 Модель разноцветного куба. Способы получения плоских проекций трехмерных объектов. Задание положения и ориентации камеры. 1.Рисование трехмерного куба. Куб следует рассматривать как шесть многоугольников которые определяют его грани. Мас

Русский

2013-06-08

81.5 KB

12 чел.

Лабораторная работа №4

Модель разноцветного куба.  Способы получения плоских проекций трехмерных объектов. Задание положения и ориентации камеры.

1.Рисование трехмерного куба.

Куб следует рассматривать как шесть многоугольников, которые определяют его грани. Массив вершин куба может быть представлен в следующем виде:

GLfloat vertices[][3]={{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},

{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},

{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};

Для определения граней куба можно использовать список точек- элементов массива вершин. Например, одна грань куба в тексте программы определяется следующим образом:

glBegin(GL_POLYGON);

glVertex3fv(vertices[0]);

glVertex3fv(vertices[3]);

glVertex3fv(vertices[2]);

glVertex3fv(vertices[1]);

glEnd();

 Другие пять граней определяются аналогично. При определении трехмерных многогранников порядок перечисления вершин имеет большое значение. Следует учитывать, что многоугольник имеет две стороны- внутреннюю и внешнюю. Будем называть грань внешней, если при взгляде  с внешней стороны объекта на эту грань ее вершины «обходятся» против часовой стрелки. Этот метод известен как «правило правой руки», поскольку, если расположить четыре согнутых пальца павой руки вдоль направления обхода контура, большой палец будет указывать наружную сторону грани.

Список вершин можно использовать и для хранения информации, необходимой для раскрашивания куба. С вершинами в данном примере будут ассоциироваться чистые цвета вершин цветового куба (черный, белый, красный, зеленый, синий, голубой, фиолетовый, желтый):

GLfloat colors[][3]={{0.0,0.0,0.0},{1.0,0.0,0.0},

{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},

{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}};

 Для управления режимом интерполяции цветов используется команда void glShadeModel(GLenummode) вызов которой с параметром GL_SMOOTH включает интерполяцию (установка по умолчанию), а с GL_FLAT отключает.

Функция quad() вычерчивает четырехугольник, заданный точками в списке вершин, а функция colorcube() задает шесть граней таким образом, чтобы все они были внешними.

GLfloat vertices[][3]={{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},

{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},

{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};

GLfloat colors[][3]={{0.0,0.0,0.0},{1.0,0.0,0.0},

{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},

{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}};

void polygon(int a, int b, int c, int d)

{

glBegin(GL_POLYGON);

glColor3fv(colors[a]);

glVertex3fv(vertices[a]);

glColor3fv(colors[b]);

glVertex3fv(vertices[b]);

glColor3fv(colors[c]);

glVertex3fv(vertices[c]);

glColor3fv(colors[d]);

glVertex3fv(vertices[d]);

glEnd();

}

void colorcube()

{

polygon(0,3,2,1);

polygon(2,3,7,6);

polygon(0,4,7,3);

polygon(1,2,6,5);

polygon(4,5,6,7);

 polygon(0,1,5,4);

}

Проективные преобразования в OpenGL

В составе OpenGL имеются две функции для задания перспективных проекций и одна для задания параллельных проекций. Каждая из функций определяет зону видимости- пирамиду или параллелепипед. Объекты, не попадающие в эту зону, отсекаются и не включаются в отображаемую сцену.

Перспективные преобразования в OpenGL

Параметры пирамиды видимости задаются функцией glFrustum(), смысл аргументов которой поясняет рис.4.1.

 

Рис.4.1.

void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 

Значения аргументов near и far, задающих положение передней и задней отсекающих плоскостей, должны быть положительными  и отсчитываться от  центра проецирования вдоль оси проецирования.

Поскольку матрица проецирования умножается на текущую матрицу, сначала нужно задать режим работы с этой матрицей. Типичная последовательность операций представлена ниже.

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glFrustum(xmin, xmax, ymin, ymax, near, far);

Во многих приложениях предпочтительнее задавать не линейные параметры, характеризующие положение углов усеченной пирамиды видимости, а угол и поле зрения. Однако, если картинная плоскость является прямоугольником, а не квадратом, то нужно задавать пару углов зрения: один в вертикальной плоскости, другой- в горизонтальной (рис.4.2).

Рис.4.2.

  void gluPerspective(GLdouble fovy, GLdouble aspect,
GLdouble
near, GLdouble far); 

Аргументы этой функции имеют следующий смысл:

  •  fovy- угол зрения в вертикальной плоскости;
  •  aspect- отношение ширины окна картинной плоскости к его высоте;
  •  near и far- расстояние от центра проецирования до передней и задней отсекающих плоскостей.

Параллельное проецирование в OpenGL

В составе OpenGL имеется только одна функция для задания параметров параллельного проецирования, которая формирует ортогональную проекцию. Зона видимости при этом превращается в параллелепипед (рис.4.3.)

Рис.4.3.

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom,
GLdouble
top, GLdouble near, GLdouble far);

Аргументы вызова имеют тот же геометрический смысл, что и одноименные аргументы функции glFrustum().

Задание положения и ориентации камеры.

В составе OpenGL имеется функция gluLookAt(), которая позволяет задать положение и ориентацию камеры (рис.4.4).

Рис 4.4.

void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); 

Аргументы функции имеют следующий вид:

  •  eyex, eyey, eyez – координаты точки наблюдения;
  •  centerx, centery, centerz - координаты контрольной точки объекта, указывающей центр сцены;
  •  upx, upy, upz- компоненты точки, которая задает положительное направления оси Y сцены.

 Порядок выполнения работы

  1.  Составить программу рисования куба.
  2.  Получить перспективную и параллельную проекцию куба.
  3.  Организовать перемещение камеры вокруг куба, изменяя координаты точки наблюдения – eyex, eyey, eyez. Для перемещения камеры использовать клавиатуру.


 

А также другие работы, которые могут Вас заинтересовать

21878. Разработка информационных фильтров для программируемых сетевых агентов 548 KB
  Общая теория информационных агентов, дан обзор существующих разработок в области программирования при помощи агентов, введены и формализованы понятия социальной сети как информационного пространства, где действует агент, а также определены специфические функции агента, приведены этапы и результаты разработки сетевого агента.
21879. БАЛЬНЕОЛОГИЧЕСКИЕ РЕСУРСЫ КБР: ПРОБЛЕМЫ ИСПОЛЬЗОВАНИЯ И ПЕРСПЕКТИВЫ РАЗВИТИЯ (НА ПРИМЕРЕ КУРОРТА НАЛЬЧИК) 1.61 MB
  Изучение природных условий и ресурсов КБР, населения и трудовых ресурсов, хозяйства и экономических предпосылок развития рекреации; Составление характеристики рекреационных ресурсов КБР и их использования: природных, социально-экономических, культурно-исторических ресурсов; Рассмотрение современного курортно-рекреационного комплекса КБР...
21880. Бандитизм (статья 209 УК РФ) 250.5 KB
  Бандитизм - преступления против общественной безопасности, т.е. деяния, признанные уголовным законом грубо нарушающими нормальные условия повседневной жизни и деятельности людей. Эти преступления причиняют или могут причинить существенный вред личным, общественным, и государственным интересам, здоровью, телесной неприкосновенности и достоинству граждан.
21881. Влияние восточных элементов на режиссуру ХХ века 1.24 MB
  Рассмотреть основные принципы театра «Но», охарактеризовать функции маски в театре «Но», выявить аналогии основных принципов театра «Но» в европейской режиссуре, проанализировать функции маски в европейской режиссуре XX века.
21882. Основы организации обслуживания потребителей 87.5 KB
  1 Метод обслуживания официантами .2 Самообслуживание его сущность и формы Комплексная оценка показателей качества обслуживания 1. Процесс обслуживания потребителей это совокупность операций которые выполняются исполнителем при непосредственном контакте с потребителем услуг во время реализации кулинарной продукции и организации досуга.
21883. Меню и карта вин 153.11 KB
  Назначение и принципы составления меню 2. Последовательность расположения в меню закусок блюд и напитков 3. Виды меню 4.
21884. Организация самообслуживания на предприятиях общественного питания 46.88 KB
  1 Немеханизированные линии раздач .2 Механизированные линии отпуска обедов .1 Механизированные линии непрерывного отпуска обедов .2 Механизированные линии периодического отпуска обедов 1 Классификация линий раздач В зависимости от формы самообслуживания на предприятиях общественного питания принимается два основных типа раздач: специализированные раздачи раздачи на которых устанавливают специализированные секции для реализации отдельных видов блюд холодные блюда и закуски горячие блюда сладкие блюда и напитки.
21885. Специальные виды услуг и формы обслуживания 126.2 KB
  Обслуживание в гостиницах Предприятия общественного питания при гостиницах предназначены в основном для обслуживания проживающих в них гостей. Однако в зависимости от конкретных условий местонахождения гостиницы степени обеспечения жителями данного района предприятиями общественного питания количество мест в ресторанах буфетах при гостиницах может быть изменено при соответствующем техникоэкономическом обосновании. Предприятия общественного питания при гостиницах начинают свою работу не позднее 8 часов утра по местному времени. В...
21886. Столовая посуда, приборы и столовое белье 149.67 KB
  Майоликовая гончарная а также деревянная посуда применяется как правило для подачи национальных блюд и напитков в специализированных предприятиях питания. Для подачи хлеба тостов мучных кулинарных изделий служат: тарелки пирожковые d = 170180 мм используется при индивидуальном обслуживании для подачи хлеба тостов расстегаев пирожков; хлебницы используются при групповом обслуживании. Для подачи холодных закусок применяют: тарелки закусочные d = 200; 220240 мм их используют также в качестве подставных тарелок под...