Similar presentations:
Графическое двухмерное программирование c применением OpenGL
1.
Графическое двухмерное программированиеc применением OpenGL
Оглавление
Тема 1. Точка ........................................................................................................................................... 1
Тема 2. Линия .......................................................................................................................................... 2
Тема 3. Треугольник ............................................................................................................................... 4
Тема 4. Четырехугольник ....................................................................................................................... 6
Тема 5. Многоугольник .......................................................................................................................... 6
Лабораторный практикум....................................................................................................................... 7
ПРИЛОЖЕНИЕ А .................................................................................................................................11
Тема 1. Точка
Примитив – это фигура, такая как точка, линия, многоугольник, которая
рисуется, хранится и которой манипулируют как единой дискретной сущностью.
Другими словами, примитивы – это те элементы, из которых строятся графические
объекты любой степени сложности.
Под вершиной в графической библиотеке OpenGL понимается точка в пространстве,
координаты которой можно задавать следующим образом:
glVertex[2 3 4][s i f d](cords: type)
glVertex[2 3 4][s i f d]v(cords: ^type)
Число в названии команды соответствует числу явно задаваемых значений, а
последующий символ - их типу.
Чтобы построить какую-либо фигуру задания одних только координат вершин
недостаточно – эти вершины надо объединить в одно целое, определив необходимые
свойства.
Задание примитива происходит внутри командных скобок:
glBegin(mode);
…
glEnd();
Аргумент mode определяет тип примитива, который задается внутри.
1
2.
glBegin и glEnd задают интервал вершин, которые определяют примитив илигруппу подобных примитивов. glBegin принимает один аргумент mode, который
определяет, какими из 10 способов будет интерпретированы вершины.
Отметим, что в OpenGL, левый нижний угол области вывода имеет координаты
[-1; -1], правый верхний [1; 1].
Для построения точки значение аргумента mode указываем GL_POINTS. Каждый
вызов glVertex задает отдельную точку, каждая отдельная точка рассматривается как
отдельная точка, параметры которой не зависят от параметров остальных заданных точек.
При построении точки можно задать ее размер, цвет, а также устанавливать режим
сглаживания для получения круглой, а не квадратной точки. Ниже приведен фрагмент
листинга программы построения точки в центре формы, на рис. 1 приведен результат
работы приложения.
Рис. 1. Построение точки в центре формы
Тема 2. Линия
От точек перейдем к линиям. В OpenGL существует три различных режима
построения линий (рис. 2).
2
3.
Рис. 2. Три режима построения линийДля построения «независимой» линии присваиваем аргументу mode значение
GL_LINES, тогда каждая пара вершин рассматривается как независимый отрезок. Первые
две вершины определяют первый отрезок, следующие две – второй отрезок и т.д. Если
число вершин нечетное, то последняя вершина игнорируется.
Ниже приведен фрагмент листинга программы построения «независимой» линии, на
рис. 2 приведен результат работы приложения.
Рис. 2. Построение линии OpenGL
Для построения ломаной линии необходимо аргументу mode установить значение
GL_LINE_STRIP. В этом режиме рисуется последовательность из одного или нескольких
связанных отрезков. Первая вершина задает начало первого отрезка, а вторая – конец
первого, который является также началом второго и т.д.
Ниже приведен фрагмент листинга программы построения ломаной линии, на рис. 3
приведен результат работы приложения.
3
4.
Рис. 3. Построение ломаной линии OpenGLДля построения ломанной замкнутой линии необходимо аргументу mode установить
значение GL_LINES_LOOP. Этот режим аналогичен предыдущему – рисуется
последовательность из одного или нескольких связанных отрезков, причем последний
отрезок определяется последней и первой вершиной, образуя замкнутую ломаную.
Ниже приведен фрагмент листинга программы построения замкнутой ломаной
линии, на рис. 4 приведен результат работы приложения.
Рис. 4. Построение замкнутой ломаной линии OpenGL
Тема 3. Треугольник
В OpenGL возможны три варианта построения треугольников (рис. 5):
4
5.
Рис.5. Построение треугольников OpenGLПри указании аргументу mode значения GL_TRIANGLES, каждая тройка вершин
рассматривается как независимый треугольник.
Если число вершин не кратно 3, то оставшиеся (одна или две) вершины
игнорируются.
Для построения связанных треугольников, имеющих общую вершину, необходимо
аргументу mode установить значение GL_TRIANGLE_STRIP. Первые три вершины
определяют первый треугольник (V0,V1,V2); вторая, третья и четвертая – формируют
второй треугольник (V1,V2,V3) и т.д.
При указании аргументу mode значения GL_TRIANGLE_FAN рисуется группа
связанных треугольников, имеющих общую вершину. Первые три вершины определяют
первый треугольник (V0,V1,V2); первая, третья и четвертая – формируют второй
треугольник (V0,V2,V3) и т.д.
Ниже приведен фрагмент листинга программы построения связанных треугольников,
имеющих общую вершину, на рис. 6 приведен результат работы приложения.
Рис. 6. Построения связанных треугольников GL_TRIANGLE_FAN OpenGL
5
6.
Тема 4. ЧетырехугольникВ OpenGL возможны два варианта построения четырехугольников (рис. 7):
Рис.7. Построение четырехугольников OpenGL
При указании аргументу mode значения GL_QUADS, каждая группа из четырех
вершин рассматривается как независимый четырехугольник.
Если число вершин не кратно 4, то оставшиеся (одна, две или три) вершины
игнорируются.
При указании аргументу mode значения GL_QUAD_STRIP рисуется группа
связанных четырехугольников, имеющих общую грань. Первые четыре вершины
определяют первый четырехугольник (V0,V1,V2,V3); вторая, третья, четвертая и пятая –
формируют второй четырехугольник (V2,V3 V4,V5) и т.д.
Тема 5. Многоугольник
Для построения выпуклого многоугольника необходимо указать аргументу mode
значение GL_POLYGON – рисует отдельный выпуклый многоугольник, заданный
вершинами от 1 до n.
При построении примитивов OpenGL есть некоторые условия на минимальное
число вершин – если для определенного примитива число вершин меньше требуемого, то
примитив игнорируется. Минимальное число вершин в зависимости от типа примитива
представлено в табл. 1.
Табл. 1. Минимальное число вершин в зависимости от типа примитива
№
1
2
3
4
5
6
7
8
9
10
Тип примитива
(mode)
GL_POINTS
GL_LINES
GL_LINES_STRIP
GL_LINES_LOOP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
GL_POLYGON
Минимальное
число вершин
(vertex)
1
2
2
2
3
3
3
4
4
3
6
7.
Лабораторный практикумЦель лабораторного практикума в этом модуле – получение навыков моделирования
двухмерных объектов с применением OpenGL.
Задание:
1) Построить изображение всех двухмерных примитивов OpenGL:
Фигура 1– отображаем только вершины фигуры (GL_POINTS);
Фигуры 2,3,4– отобразжаем
каркас фигур линиями (GL_LINES, GL_LINE_STRIP,
GL_LINE_LOOP);
Фигуры 5,6,7– построить фигуры с использованием примитивов со сплошной заливкой:
GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN;
Фигуры 8,9 – построить фигуры с использованием GL_QUADS, GL_QUAD_STRIP;
Фигуру 10 построить с использованием GL_POLYGON.
2) Построить двумерную фигуру на плоскости с применением OpenGL. Варианты задания
приведены в приложении А.
3) Написать отчет о выполнении лабораторной работы.
Пример выполнения задания 1:
Шаг 1.Создаем новый проект, в качестве шаблона установив приложение Windows
Forms. Подключаем библиотеку OpenGL и добавляем компонент SimpleOpenGLControl, на
поверхности которого и будем рисовать.
Шаг 2.Для организации отображения 10 фигур можно использовать 10 стандартных
кнопок (button), клавиши клавиатуры или панель меню. В данном примере используем элемент
управления MenuStrip (Windows Forms) (рис.9).
Рис.9. Элемент управления MenuStrip.
Шаг 3. Создадим обработчик событий для события Click и нарисуем пять точек
средствами библиотеки OpenGL (рис.10).
7
8.
Рис.10. Построение точек средствами библиотеки OpenGLШаг 4. Создадим обработчик событий для события Click для отображения линий.
Для одних и тех же вершин построим еще три фигуры (рис. 11).
Рис.11. Три типа линий библиотеки OpenGL
8
9.
Шаг 5. Создадим обработчик событий для события Click для отображения трех типовтреугольников (рис. 12). Для сложения цветов укажем для каждой из вершин разный цвет.
Рис.12. Три типа треугольников OpenGL
Шаг 6. Создадим обработчик событий для события Click для отображения двух типов
четырехугольников (рис. 13). Для сложения цветов укажем для каждой вершин разный цвет.
Рис.13. Два типа четырехугольников библиотеки OpenGL
9
10.
Шаг 7. Создадим последний обработчик событий для события Click для отображениямногоугольника (рис. 14). Для сложения цветов укажем для каждой вершин разный цвет.
Рис.14. Построение многоугольника средствами библиотеки OpenGL
10
11.
ПРИЛОЖЕНИЕ АВарианты задания
№1
№2
№3
№4
№5
№6
№7
№8
№9
№10
№11
№12
11
12.
№13№14
№16
№17
№18
№19
№20
№21
№22
№23
№24
№25
12