Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к ЛР_v0.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
587.09 Кб
Скачать

Постановка задачи

Написать программу, реализующую поддержку OpenGL-контекста в соответствии с выбранным уровнем сложности: низкий – контекст, создаваемый по умолчанию, средний – контекст определенной версии в режиме Core Profile, повышенный – процесс динамической загрузки функций "расширений" вынести в отдельную статическую или динамическую библиотеку, загрузку библиотеки OpenGL производить с помощью функции SDL_GL_LoadLibrary. Выход из программы осуществлять при нажатии сочетания клавиш "Ctrl + Q".

Контрольные вопросы

  1. Что такое разрешающая способность экрана?

  2. Какие основные фрагменты должна содержать минимальная программа OpenGL?

  3. Что входит в понятие формат пикселя?

  4. Какие библиотечные файлы должны быть подключены к программе для работы с OpenGL?

  5. Какая цветовая модель используется при определении цвета в данной программе? Какие параметры следует указать, чтобы цвет фона был фиолетовый?

  6. Функция SDL_GL_GetProcAddress, для чего служит и где применяется?

  7. Как вычислить координату центра экрана?

  8. В какой секции кода можно записывать команды рисования сцены?

  9. Функция SDL_GL_LoadLibrary, для чего служит и где применяется?

  10. Что необходимо произвести для инициализации OpenGL в режиме Core Profile? Для чего предназначен данный режим?

  11. Какие существуют атрибуты типа SDL_GLattr, для чего они служат?

Лабораторная работа № 2. Примитивы OpenGl, построение двумерных объектов, язык шейдеров.

Цель работы – научиться выводить средствами OpenGL двумерные объекты на экран. Познакомиться со специализированным языком шейдеров OpenGL. Изучить различные способы закрашивания объектов.

Теоретические сведения

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

Точки.

Точки представляют собой одиночные вершины. Если точка должна быть изображена на плоскости, то для определения её положения необходимы две координаты. В этом случае используется вектор с двумя аргументами, например: Vector2f(0, 0). Буква f в названии вектора определяет тип аргументов – вещественные числа (float). Следовательно, если точка должна быть изображена в трехмерном пространстве, то для определения её положения необходимы три координаты. В этом случае используется вектор с тремя аргументами, например: Vector3f(0.5, 0.3,-0.7).

Константой для рисования точек является: GL_POINTS.

Линии: одиночные, ломаные, замкнутые ломаные.

Одиночная линия определяется двумя вершинами. Если требуется нарисовать несколько одиночных линий, то должны быть описаны координаты пар вершин, то есть количество вершин должно быть четным. В случае, если количество вершин нечетно – последняя вершина игнорируется.

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

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

Треугольники: одиночные, лента, веер.

Для рисования треугольников используется константа GL_TRIANGLES. При этом, количество вершин должно быть кратно трем. Каждые три вершины определяют треугольник.

Лента треугольников используется, если изображение может быть построено с помощью нескольких треугольников, имеющих смежные стороны (рис. 1).

Рисунок 1 – Лента треугольников.

Здесь сторона v2v3 является общей стороной для первого и второго треугольников, сторона v3v4 – общей стороной второго и третьего треугольников и так далее. Если такую фигуру описывать с помощью одиночных треугольников, то необходимо задавать координаты всех вершин всех треугольников: v1, v2, v3, v2, v3, v4, v3, v4, v5, v4, v5, v6 – всего 12 вершин. Использование ленты треугольников позволяет не дублировать вершины при описании их координат. Изображенная на рисунке фигура может быть представлена лентой треугольников, координаты вершин перечисляются в следующем порядке: v1, v2, v3, v4, v5, v6 – достаточно 6 вершин.

Константа для примитива "лента треугольников": GL_TRIANGLE_STRIP.

Другая возможность рисования с помощью треугольников – использование "веера треугольников" в тех случаях, когда несколько треугольников имеют общую вершину (рис. 2). При описании вершин первой в списке должна стоять общая вершина. То есть в списке из нескольких вершин первые три вершины определяют первый треугольник; первая, третья и четвертая – второй; первая, четвертая и пятая – третий; и так далее. Если в списке имеется N вершин, то будет изображено N-2 треугольника.

Константа для примитива "веер треугольников": GL_TRIANGLE_FAN.

Рисунок 2 – Веер треугольников.