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


 

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

58072. музичний образ поліфонія фуга; зосередити увагу учнів на особливостях будови й розвитку поліфонічног. 39 KB
  Мета: розширити та поглибити знання учнів про творчість Й.С.Баха; закріпити визначення термінів і понять: «музичний образ», «поліфонія», «фуга»; зосередити увагу учнів на особливостях будови й розвитку поліфонічного твору; надати уявлення про інструмент-оркестр – орган...
58073. Музика і мистецтво слова. Байки, зміст яких пов’язаний із музикою 112 KB
  МЕТА: на новому літературному (байки І. Крилова) і музичному (Квартет № 2 О. Бородіна) матеріалі довести нерозривний звязок літератури та музики на підставі: розвитку навичок аналізу, спостереження, узагальнення; розуміння ролі засобів художньої виразності у створенні художнього образу...
58074. Звук и буква «С» в словах. Использование интерактивных методов в логопедическом сопровождении 57.5 KB
  Развивать фонематический слух и фонематическое восприятие; уточнить артикуляцию звука с; уметь соотносить его с буквой; обогащать и активизировать словарный запас, совершенствовать звуковой анализ слов.
58075. Засоби виразності декоративного мистецтва: символи, знаки в орнаментах; декоративна форма (стилізація, колір і символ), символіка «Дерево життя» в декоративно-ужитковому мистецтві 52 KB
  Мета: ознайомити учнів із символами в орнаментах, з процесом узагальнення форми; розвивати прийоми роботи з ножицями; розвивати вміння аналізувати, порівнювати, узагальнювати; розвивати творчу уяву, спостережливість, акуратність, стимулювати інтерес учнів до творчої діяльності в умовах практичної роботи...
58076. Природні форми. Створення творчої композиції «Як не любити зими сніжно-синьої» 812 KB
  Мета: характеризувати кольорове розмаїття навколишнього середовища кольорову гаму зими колорит художніх творів; навчити через певну кольорову гаму передавати настрій пейзажу; вдосконалювати технічні прийоми зображення гуашевими фарбами прийоми підбору...
58077. Харчування підлітків 57.5 KB
  МЕТА: сформувати в учнів уявлення про вікові вимоги до харчування калорійність харчування; встановити основні критерії раціонального харчування; навчити розпізнавати ознаки порушення питного режиму...
58078. Використання ІКТ на уроках як засіб підвищення якості навчальних досягнень учнів 220 KB
  Успішність розвязання цього завдання значною мірою залежить від мети використання компютера в навчальному процесі якості й можливостей програмного забезпечення та від того яке місце посяде компютер в системі дидактичних засобів.
58079. Свято- захист проекту “Людина без книги, як криниця без води” 133.5 KB
  Мета: ознайомити учнів із тим, як книжка прийшла до людей; розкрити значення книги в житті людини; викликати інтерес до читання; розвивати творчі здібності, артистизм, зв’язне мовлення; активно залучати до творчого процесу батьків; виховувати любов до книжки, дбайливе ставлення до неї.
58080. Створення композицій з природних матеріалів. Флористика. Натюрморт 45.5 KB
  Мета уроку: навчити створювати рельєфні твори з природного матеріалу за законами композиції; готувати природний матеріал для створення флористики; розрізняти флористику та ікебану; розрізняти фактуру матеріалів для флористики та порівнювати їх форми і характерні риси...