14573

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

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

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

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

Русский

2013-06-08

81.5 KB

9 чел.

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


 

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

20377. ГОСУДАРСТВЕННАЯ РЕГИСТРАЦИЯ ИПОТЕКИ 2.61 MB
  Государственная регистрация прав на недвижимое имущество и сделок с ним по замыслу разработчиков Гражданского кодекса Российской Федерации была призвана обеспечить публичность гражданского оборота недвижимых вещей иными словами стремиться с помощью правовых и организационных мер оздоровить и упорядочить рынок недвижимого имущества который стал бурно развиваться в России сконцентрировав все его функции по инвентаризации учету регистрации использованию и налогообложению в системе единого государственного органа. Система регистрации...
20378. Комментарий к Гражданскому кодексу Российской Федерации. Часть третья 3.97 MB
  1 комментируемой статьи являются правилами имеющими отношение ко второму из названных элементов свободы наследования а именно к праву наследников на получение наследства. Конституционно гарантированное право наследников на получение наследства определяет исходную позицию ГК который устанавливает специальное правило обеспечивающее законодательную реализацию указания содержащегося в Постановлении Конституционного Суда РФ N 1П: Право наследования предусмотренное статьей 35 часть 4 Конституции Российской Федерации: обеспечивает...
20379. Жилищное право: Учебник 3.79 MB
  Это снижает не только уровень обеспечения социальных гарантий но и степень доверия граждан к ним в связи с чем возникает необходимость уточнить действующие обязательства государства по обеспечению жилыми помещениями отдельных категорий граждан и сформировать единые принципы и механизмы оказания поддержки различным категориям граждан за счет бюджетных средств; необходимость обеспечения устойчивого функционирования жилищного сектора которое позволит удовлетворять жилищные потребности населения без существенного участия федерального центра и...
20380. Комментарий к Гражданскому кодексу Российской Федерации. Часть вторая 7.77 MB
  Вместе с тем данные нормативные положения распространяют свое действие и на отношения связанные с исполнением и прекращением договора включая возможность наступления ответственности сторон за неисполнение и ненадлежащее исполнение договорного обязательства. В 1 содержатся общие нормы применимые ко всем видам договора куплипродажи при условии что они не изменены конкретным договором или специальными нормами касающимися отдельных видов договора куплипродажи 28. Такие изменения не могут однако отменять действия общих норм 1...
20381. КАК УЗНАТЬ ХАРАКТЕР ЧЕЛОВЕКА ПО ЕГО ПОДПИСИ ИЛИ ПРАКТИЧЕСКАЯ ГРАФОЛОГИЯ 217.5 KB
  Наджимов КАК УЗНАТЬ ХАРАКТЕР ЧЕЛОВЕКА ПО ЕГО ПОДПИСИ ИЛИ ПРАКТИЧЕСКАЯ ГРАФОЛОГИЯ ВВЕДЕНИЕ Графология это наука изучающая законы зависимости между почерком и личностью характером человека. РЕКОМЕНДАЦИИ ПО ПРОВЕДЕНИЮ ГРАФОЛОГИЧЕСКОГО АНАЛИЗА В данной работе в основном внимание уделено анализу подписи так как обычное письмо человека как бы причесано оно подчиняется многочисленным правилам правописания и индивидуум не может проявить себя полностью. Умело применять метод логических цепей это значит что если по подписи точно определена...
20382. СУДЕБНАЯ ЭКСПЕРТИЗА (ЭКСПЕРТОЛОГИЯ) 654 KB
  Раскрывается специфика их классификации дается описание каждого класса экспертиз с наименованием предмета объекта и наиболее часто встречаемые вопросы при назначении того или иного вида судебной экспертизы. Типография УВД Оренбургской области ВВЕДЕНИЕ Институт судебной экспертизы в дореформенных правовых актах России существовал в виде отдельных предписаний относящихся к деятельности сведущих лиц...
20383. Курс международного уголовного права 1.15 MB
  Курс международного уголовного права. ПОНЯТИЕ ПРЕДМЕТ РЕГУЛИРОВАНИЯ ПРИНЦИПЫ И ИСТОЧНИКИ МЕЖДУНАРОДНОГО УГОЛОВНОГО ПРАВА 1. Понятие и предмет международного уголовного права 1. Принципы международного уголовного права 1.
20384. Сращивание организованной и экономической преступности – новая форма криминальной активности 270 KB
  Общая характеристика организованной преступности в сфере экономики Современная криминальная ситуация закономерный результат действия комплекса факторов связанных с переходным периодом ошибками и просчетами в решении стратегических и тактических задач реформирования социальной жизни. Многократно повысилась доходность от преступлений совершаемых не только в традиционном криминальном бизнесе но и в новых отраслях и сферах легальной экономики нефтебизнесе кредитнофинансовой сфере обороте спирта и алкогольных напитков операциях с...