Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка СМ 2011.doc
Скачиваний:
3
Добавлен:
14.11.2019
Размер:
108.54 Кб
Скачать

Особенности работы с вершинами и примитивами в OpenGl.

  1. Цель работы

Изучение работы с вершинами и примитивами в OpenGL.

2. Теоретические положения

Вершина – это точка в трехмерном пространстве. Для ее определения в библиотеке реализована специальная команда:

void glVertex[2 3 4][s i f d] (type coord)

void glVertex[2 3 4][s i f d] v (type coord)

Вызов любой команды glVertex* определяется четырьмя координатами: x, y, z, w. При этом соблюдается следующее соглашение: вызов glVertex2* задает координаты x, y, z полагается равной 0, а w – 1. Вызов glVertex3* задает координаты x, y, z, а w полагается равной 1. Вызов glVertex4* задает все четыре координаты.

Примитив – это фигура, такая как точка, линия, многоугольник, прямоугольник пикселей или битовый массив, которая рисуется, хранится и которой манипулируют как единой дискретной величиной. Другими словами, примитивы – это те элементы, из которых строятся графические объекты любой степени сложности. Они определяются группами из одной или нескольких вершин, каждая из которых имеет ассоциированные с ней данные:

1. Текущий цвет – задает цвет, который вместе с условиями освещения определяет результирующий цвет вершины. Цвет задается командами glColor* для режима RGB и glIndex* для индексного режима.

2. Текущая позиции растра – используется для определения координат растра при работе с пикселами и битовыми массивами. Задается командой glRastePos*.

3. Текущая нормаль – определяет вектор нормали, ассоциированный с отдельной нормалью, и задает ориентацию содержащей ее поверхности в трехмерном пространстве. Для указания нормали реализована команда glNormal*.

4. Текущие координаты текстуры – определяют местоположение в карте текстуры, которая ассоциируется с вершиной объекта. Задаются командой glTexCoord*.

Примитив или группа однотипных примитивов, к которым относятся точки, линии, связанные линии, замкнутые линии, треугольники, связанные треугольники с общим ребром, связанные треугольники с общей вершиной, четырехугольники, связанные четырехугольники и многоугольники, определяются внутри командных скобок glBegin/glEnd:

Void glBegin (Glenum mode)

Void glEnd()

Параметр mode определяет примитивы, которые создаются из вершин, определенных между этими командами. Доступными являются следующие символы констант (GL_LINES – номер текущей вершины, N – общее число вершин):

GL_POINTS – каждая вершина рассматривается как отдельная точка, параметры которой не зависят от параметров остальных заданных точек. При этом вершина n определяет точку n. Рисуется N точек. Минимальное число вершин -1.

GL_LINES – каждая пара вершин рассматривается как независимы отрезок. Первые две вершины определяют первый отрезок, следующие две – второй и т.д., вершины (2n-1) и 2n определяют отрезок n. Всего рисуется N/2 линий. Если число вершин нечетно, то последняя просто игнорируется. Минимальное число вершин -2.

GL_LINE_STRIP – в этом режиме рисуется последовательность из одного или нескольких связанных отрезков. Первая вершина задает начало первого отрезка, вторая – конец первого, который является также началом второго. В общем случае, вершина n (n>1) определяет начало отрезка n и конец отрезка (n-1). Всего рисуется (N-1) отрезок. Минимальное число вершин -2.

GL_LINE_LOOPэтот режим аналогичен предыдущему за исключением того, что последняя вершина является началом отрезка, концом которого служит первая вершина. Вершины n и (n+1) определяют отрезок n. При этом последний отрезок определяется вершинами N и 1. Всего рисуется N отрезков. Минимальное число вершин -2.

GL_TRIANGLES – каждая тройка вершин рассматривается как независимый треугольник. Вершины (3n-2), (3 n-1) и 3n (в таком порядке) определяют треугольник n. Если число вершин не кратно 3, то оставшиеся (одна или две) вершины игнорируются. Всего рисуется N/3 треугольника. Минимальное число вершин -3

GL_TRIANGLE_STRIPв этом режиме рисуется группа связанных треугольников, имеющих общую грань. Первые три вершины определяют первый треугольник, вторая, третья и четвертая – второй и т.д. Для нечетного n вершины n, (n+1) и (n+2) определят треугольник n. Для четного n треугольник определят вершины (n+1), n и (n+2). Всего рисуется (N-2) треугольника. Минимальное число вершин -3.

GL_TRIANGLE_FAN – в этом режиме также рисуется группа связанных треугольников. Первые три вершины определяют первый треугольник. Первая, третья и четвертая – второй и т.д. Вершины 1, (n+1), (n+2) определяют треугольник n . Всего рисуется (N-2) треугольника. Минимальное число вершин -3.

GL_QUADS – каждая группа из четырех вершин рассматривается как независимый четырехугольник. Вершины (4 n -1) и (4n ) определяют четырехугольник n . Если число вершин не кратно 4, то оставшиеся (одна, две или три) вершины игнорируются. Всего рисуется N/4 четырехугольника. Минимальное число вершин - 4.

GL_QUAD_STRIP – рисует связанную группу четырехугольников. Первые четыре вершины определяют первый четырехугольник. Третья, четвертая, пятая и шестая – второй и т.д. Вершины (2n-1), 2n, (2 n+2) и (2 n+1)определяют четырехугольник n. Всего рисуется (N-2)/2 четырехугольника. Минимальное число вершин - 4.

GL_POLYGON – рисует отдельный выпуклый многоугольник, заданный вершинами от 1 до n. Минимальное число вершин -3.

3. Задание на работу

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

Определить функции инициализации, отслеживающие изменения размеров и отображения в окне.

Написать программу, строящую треугольники заданного цвета.

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

4.1. Ознакомиться с теоретическими положениями,

4.2. Выполнить предложенный вариант задания.

5. Оформление отчета

Отчет должен содержать: цель работы, задание на работу, результаты работы.

Лабораторная работа № 3.