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. Для перемещения камеры использовать клавиатуру.


 

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

50208. Вивчення дисперсійної спектральної призми 242.5 KB
  Гоніометр Г5М складається з таких основних частин: коліматора суміщеного з ртутною лампою яка захищена металевим кожухом поворотного столика зорової труби та основи гоніометра основа гоніометра; обєктив коліматора; об'єктив зорової труби; окуляр зорової труби; відліковий мікроскоп;...
50209. Нечеткая логика 68 KB
  Различать степени изменения лингвистической переменной в трех степенях – «Очень – Нормально – Слабо» Б. Изменять порог чувствительности. 1. Казанова – Генрих VIII – верный лебедь
50210. Визначення продуктивності ультразвукового прошивального верстата 476.5 KB
  Плакати: загальний вид ультразвукового верстата й схема його роботи. Призначення ультразвукового прошивального верстата Ультразвуковий прошивальний верстат призначений для виготовлення або доведення отворів різної форми в деталях із твердих тендітних матеріалів як струмопровідних так і діелектриків стекло сітали кераміка ферити кремній германій рубін алмази тверді сплави й ін. Опис принципової схеми ультразвукового прошивального верстата мал.
50211. Визначення довжини світлової хвилі за допомогою біпризми Френеля 459 KB
  2 Прилади і матеріали Біпризма Френеля джерело світла лампочка розжарювання розсувна щілина оптичний мікроскоп вертикальна масштабна шкала лінійка світлофільтри Опис установки Для пояснення методу отримання інтерференційної картини за допомогою біпризми Френеля необхідно використати оптичну схему яка наведена на рис. 1 1 джерело світла із змінними світлофільтрами; 2 конденсорна лінза; 3 розсувна щілина; 4 біпризма Френеля; 5 оптичний мікроскоп. Увімкнути джерело світла 1 в мережу 220 В.
50212. Вивчення особливостей коливальної системи ультразвукових верстатів і визначення змін швидкості робочої подачі інструмента при прошиванні отвору 139.5 KB
  Перетворювача електричних коливань у механічні; Концентратора трансформатора пружних коливань який збільшує амплітуду коливань перетворювача та погоджує параметри перетворювача та навантаження; Виконують роль ланок резонансної довжини при пере дачі коливань від перетворювача інструмента та в робочу зону. Амплітуда коливань торця перетворювача звичайно не більше за 5.
50213. Дослідження властивостей напівпровідників методом ефекту Холла 75 KB
  Схема вимірювання питомого опору зразка і холлівської різниці потенціалів зображена на рис. досліджуваний зразок; 1 зонд для вимірювання холлівської напруги; 2 зонд для вимірювання питомого опору. Зразки на яких проводяться вимірювання мають форму паралелепіпеда і закріплені на спеціальному держаку. Зонди для вимірювання питомого опору та холлівської напруги припаюють до зразка припоєм підібраним так щоб зменшити перехідний опір.
50215. Визначення радіуса кривизни лінзи допомогою кілець Ньютона 235 KB
  1 вміти описати утворення інтерференційних смуг однакової товщини та кілець Ньютона 2.5 Прилади і матеріали Мікроскоп плоскоопукла лінза великого радіуса кривизни плоскопаралельна пластинка освітлювач з блоком живлення світлофільтри Теоретичні відомості та опис установки Оптична схема для спостереження кілець Ньютона у відбитому світлі в даній лабораторній роботі наведена на рис. Якщо визначити експериментально радіуси темних го і го кілець Ньютона то із співвідношень 2.
50216. Проблеми та шляхи розвитку міжнародного ринку інформаційних технологій 557.5 KB
  Дослідження сутності міжнародного ринку інформаційних технологій та його ролі в світовій економіці; класифікація обʼєктів ринку інформаційних технологій; аналіз розвитку міжнародного ринку інформаційних технологій; знаходження механізму регулювання світового ринку інформаційних технологій; відображення напрямків розвитку міжнародного ринку інформаційних технологій.