Общие сведения об OpenGL
OpenGL (Open Graphics Library) – это популярная программная технология, которая предоставляет практически все возможности новейшего графического оборудования, обеспечивая кроссплатформенный программный интерфейс для работы с двумерной и трёхмерной компьютерной графикой.
Кроссплатформенность программного обеспечения предполагает возможность запускать его исполняемые файлы на платформах различных операционных систем без перекомпилирования программы. Такая независимость от операционной системы позволяет длительно использовать готовые программные продукты в изменяющихся условиях стремительного развития компьютерных технологий. Это также удобно и для применения OpenGL в сети.
На самом деле, OpenGL – это спецификация, то есть документ, в котором определяется набор допустимых функций со всеми их возможностями и описывается их точное поведение. Реализация же данной технологии в виде библиотеки готовых функций будет зависеть от конкретной платформы и осуществляется разработчиками аппаратного обеспечения таким образом, чтобы оптимально использовать возможности оборудования.
Такие реализации OpenGL существуют для Windows, Unix-платформ и Mac OS и обычно предоставляются изготовителями видеодрайверов, которые и учитывают возможности видеоадаптеров для наиболее оптимального применения технологии.
OpenGL представляет собой независимый от языка программирования API (от англ. Application Programming Interface – интерфейс прикладного программирования) для создания графических приложений.
Поэтому OpenGL – это довольно удобный инструмент, который легко использовать с любым из знакомых языков программирования, у которых есть возможность привязки к OpenGL. К таким языкам программирования относятся, например, C, C#, Delphi, Java, Perl, Python, VisualBasic. То есть, как мы видим, выбор среди популярных языков достаточно большой.
Тем не менее, для эффективной работы с OpenGL необходимо иметь достаточные знания из области трёхмерной графики, математического моделирования и линейной алгебры.
Ведь OpenGL является низкоуровневым процедурным API, и поэтому для создания объектов растровой графики программисту нужно задавать точную последовательность действий.
Принцип именования функций в OpenGL
OpenGL предоставляет огромные возможности, включая в себя более 300 функций для рисования сложных трёхмерных объектов из простых графических элементов. Посмотрим, как задаются имена функций в OpenGL. Здесь соблюдаются следующие правила:
- Все имена функций начинаются со специальной приставки gl.
- Если функция передаёт некоторый параметр (например, координату или цвет точки), то к её имени добавляется суффикс следующего вида: сначала указывается число, соответствующее количеству параметров (1, 2, 3 и т. д.), затем отмечается их тип и далее – представление, определяющее в каком виде передаются параметры (если каждое число передаётся по отдельности, то к имени функции ничего не добавляется, а если параметры подаются в виде массива – то в имени дописывается буква v).
Тип параметра может принимать одно из значений: b, s, i, f, d, ub, us, ui, получивших название по первым буквам типов переменных. Это могут быть целочисленные типы byte, short и int (8-, 16- и 32-битный, соответственно), числа с плавающей запятой – float и double (число двойной точности) или беззнаковые целые числа типов unsigned byte, unsigned short, unsigned int.
Например, функция glVertex2sv задаёт координату вершины, состоящую из двух (то есть на плоскости, а не в пространстве) целых чисел типа short, передаваемых в виде указателя на массив (вектор обозначается буквой v).
Принципы рисования графических объектов с помощью OpenGL
Все графические объекты, созданные при помощи OpenGL, представляют собой набор точек, линий и многоугольников. На самом деле, существует всего лишь 10 различных геометрических примитивов, на основе которых оказывается реальным построить целое множество гораздо более сложных графических объектов. Таким образом, для того чтобы иметь возможность программно (с помощью OpenGL) изобразить любую геометрическую форму на плоскости (2D) или в пространстве (3D), достаточно знать, каким образом по координатам точек (вершин) рисуются графические примитивы.
Для задания примитива используется специальная конструкция вида: glBegin (тип_примитива) … glEnd ().
На месте многоточия здесь обязательно перечисляется нужное количество точек-вершин (с их координатами) для прорисовки определённого геометрического объекта. Там же по необходимости будут записываться и другие функции, например, для выбора нужного цвета.
Вершины фигур задаются специальной функцией glVertex..., которая уже упоминалась в примере выше. Её параметрами являются числовые координаты, указываемые через запятую в круглых скобках после имени функции. По умолчанию вершины всех геометрических фигур задаются в порядке против часовой стрелки.
И теперь отдельно перечислим 10 типов примитивов, доступных в OpenGL:
- GL_POINTS – задаёт точку;
- GL_LINES – задаёт линию;
- GL_LINE_STRIP – задаёт составленную из отрезков ломаную линию, где конец каждого предыдущего отрезка является началом следующего;
- GL_LINE_LOOP – аналогично предыдущей линии, но здесь последняя вершина соединяется с первой, и в итоге получается замкнутая фигура;
- GL_TRIANGLES – задаёт треугольник;
- GL_TRIANGLE_STRIP – каждая следующая вершина задаёт треугольник вместе с двумя предыдущими (получается лента из треугольников);
- GL_TRIANGLE_FAN – каждый треугольник задаётся первой вершиной и последующими парами (т.е. треугольники строятся вокруг первой вершины);
- GL_QUADS – задаёт четырёхугольник;
- GL_QUAD_STRIP – каждая следующая пара вершин образует четырёхугольник вместе с парой предыдущих вершин;
- GL_POLYGON – задаёт многоугольник с количеством углов, совпадающим с количеством заданных далее вершин.
Для установки цвета вершин используется функция glColor.... В OpenGL поддерживается цветовая модель RGB (или RGBA – с заданием уровня прозрачности цвета). Принцип здесь следующий: команда glColor... действует на все вершины, которые в коде перечисляются после её вызова, до тех пор пока не встретится другая команда glColor....
Далее приведем пример кода, с помощью которого средствами OpenGL осуществляется прорисовка квадрата с разноцветными вершинами:
Рисунок 1. Код. Автор24 — интернет-биржа студенческих работ