- •Часть 2
- •Особенности работы с вершинами и примитивами в OpenGl.
- •Цель работы
- •2. Теоретические положения
- •Отсечение, прозрачность и смешение цветов
- •Цель работы
- •2. Теоретические положения
- •Глубина, списки изображений, интерполяция цветов, логические операции
- •Цель работы
- •2. Теоретические положения
Особенности работы с вершинами и примитивами в OpenGl.
Цель работы
Изучение работы с вершинами и примитивами в 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.