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


 

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

2470. Групи сполучників за будовою. Конспект уроку 23.85 KB
  Мета організації уроку: згадати про службові частини мови, а саме про сполучник, сформувати в учнів поняття про класифікації сполучників, зокрема за будовою.
2471. Неозначені й заперечні займенники, їх утворення. Дефіс у неозначених займенниках 23.9 KB
  Мета організації уроку. Дати відомості про творення та вживання неозначених і заперечних займенників, формувати вміння визначити орфограми Дефіс у неозначених займенниках та обгрунтувати вибір написання відповідними орфографічними правилами, розвивати зорову і слухову увагу,спостережливість, культуру усного і писемного мовлення.
2472. Правопис прислівників. – Н і нн у прислівниках 15.86 KB
  Мета: ознайомити учнів з правилами написання прислівників на - е, -о, пояснити причини написання -н та –нн прислівниках, формувати уміння, знаходити орфограми одна і дві букви н у прислівниках, правильно писати слова з виучуваною орфограмою, на основі попередньо засвоєних знань з теми Прислівник як частина мови.
2473. Оборудование, механизация и автоматизация сварочного производства 391.59 KB
  Данный сборник направлен на формирование умений применять полученные знания на практике, на реализацию единства интеллектуальной и практической деятельности. Механизация и автоматизация являются важнейшим средством повышения производительности труда, улучшения качества и условий труда в сварочном производстве.
2474. Теория электрических цепей. Автогенераторы 895.56 KB
  Изучение и компьютерное моделирование работы LC-автогенератора с трансформаторной обратной связью. В работе необходимо исследовать условия самовозбуждения автогенератора, а также научиться определять амплитуду напряжения на выходе автогенератора в стационарном режиме.
2475. Фінанси. Електронний курс лекцій 544.17 KB
  Сутність фінансів, їх функції і роль. Принципи структурування фінансової системи. Організаційна структура фінансової системи. Управління фінансовою системою та фінансова політика. Зовнішні і внутрішні фінансові відносини. Суть і склад державних фінансів. Бюджет держави: сутність і призначення. Пряме та непряме оподаткування в Україні. Страхування і страховий ринок. Визначення фінансового ринку і його елементи.
2476. Економічна статистика 731 KB
  Основи класифікації економічної статистики. Система національних рахунків – методологічна основа економічної статистики. Показники статистики населення. Завдання статистики населення. Показники чисельності та складу населення. Статистика використання робочого часу. Статистика науково-технічної та інноваційної діяльності. Оцінка рівня інфляції, її використання для порівняльного аналізу вартісних показників. Статистика доходів сектору домашніх господарств. Джерела інформації про споживання населенням.
2477. Основы аудита. Принципы профессиональной этики аудита 244 KB
  Структура договора на проведение аудиторской проверки. Предплановая (преддоговорная) деятельность. Документация аудитора. Обзор событий, произошедших после даты составления баланса. Планирование аудиторской проверки, ее назначение и принципы. Критерии отнесения организации к обязательному аудиту. Основные этапы становления и развития аудита в России.
2478. Теория общей химии с элементами методики преподавания 413 KB
  Экспериментальные (качественные) задачи по химии. Подготовка учителя к уроку. Понятие об энтропии и изобарно-изотермическом потенциале. Самостоятельная работа учащихся по химии. Задачи курса химии средней школы. Технические средства обучения. Структура нуклеотидов и нуклеозидов.