|
Структура программы с использованием OpenGL
В OpenGL нет встроенных функций для своей инициализации. Это связано с тем, что данный программный продукт является независимым от платформы графическим API. Инициализацию обеспечивает операционная среда. Однако, при использовании дополнительных библиотек (например, GLUT), инициализация необходима. Несмотря на отсутствие инициализации, для работы с OpenGL, вначале необходимо установить используемый формат пикселя. Использование примитивов в OpenGL Под примитивами в OpenGL понимаются точки, линейные сегменты и полигоны. Так же как и в DirectX, полигоны представляют собой замкнутые трехмерные фигуры, построенные, минимум, по трем точкам.
В подключаемых библиотеках GLU и GLUT, описаны так же функции ряда геометрических фигур, таких как шар, цилиндр, диск, куб, конус, тор и т.д. Для оптимизации работы используется аппарат массивов вершин, аналогичный аппарату вершинного и индексного буфера в DirectX. Так же можно определить массивы нормалей и массивы цветов.
Использование матриц преобразованияДля задания различных преобразований объектов сцены в OpenGL используются операции над матрицами, при этом различают три типа матриц: видовая, проекций и текстуры. Все они имеют размер 4x4. Видовая матрица определяет преобразования объекта в мировых координатах, такие как параллельный перенос, изменение масштаба и поворот. Матрица проекций задает, как будут проецироваться трехмерные объекты на плоскость экрана (в оконные координаты), а матрица текстуры определяет наложение текстуры на объект. Материалы и освещение в OpenGLДля создания реалистических изображений необходимо определить как свойства самого объекта, так и свойства среды, в которой он находится. Первая группа свойств включает в себя параметры материала, из которого сделан объект, способы нанесения текстуры на его поверхность, степень прозрачности объекта. Чтобы задать свойства сред, необходимо определить количество и свойства источников света, уровень прозрачности среды, а также модель источников света.Источники света определяются так же, как и в случае с материалами. В отличие от DirectX, в OpenGL не определены конкретные виды источников освещения. Вместо этого пользователь сам задает такие параметры, как уровень сфокусированности света, максимальный угол разброса света, цвет различных типов освещения (фонового, диффузного, зеркального отражения), а также положение источника света. Использование текстур в OpenGL Для использования текстуры необходимо сначала загрузить в память изображение нужной текстуры и передать его OpenGL.
При создании образа текстуры в памяти следует учитывать следующие требования:
· Размеры текстуры, как по горизонтали, так и по вертикали должны представлять собой двойку в какой-либо степени. Это требование накладывается для компактного размещения текстуры в памяти и способствует ее эффективному использованию;
· Необходимо предусмотреть случай, когда объект по размерам значительно меньше наносимой на него текстуры. Чем меньше объект, тем меньше должна быть наносимая на него текстура и поэтому вводится понятие уровней детализации текстуры. Каждый уровень детализации задает некоторое изображение, которое является, как правило, уменьшенной в два раза копией оригинала. Такой подход позволяет улучшить качество нанесения текстуры на объект.
Основы OpenGL
Все функции библиотеки OpenGL можно разделить на пять категорий:
· Функции описания примитивов определяют объекты нижнего уровня иерархии (примитивы), которые способна отображать графическая подсистема. В OpenGL в качестве примитивов выступают точки, линии, многоугольники и т.д.;
· Функции описания источников света служат для описания положения и параметров источников света, расположенных в трехмерной сцене;
· Функции задания атрибутов. В качестве атрибутов OpenGL позволяет задавать цвет, характеристики материала, текстуры, параметры освещения;
· Функции визуализации позволяют задать положение наблюдателя в виртуальном пространстве, параметры объектива камеры. Это позволяет не только правильно построить изображение, но и отсечь объекты, оказавшиеся вне поля зрения;
· Набор функций геометрических преобразований позволяет выполнять различные преобразования объектов – поворот, перенос, масштабирование.
При этом OpenGL может выполнять дополнительные операции, такие как использование сплайнов для построения линий и поверхностей, удаление невидимых фрагментов изображений, работа с изображениями на уровне пикселей и т.д.
Интерфейс OpenGL
OpenGL состоит из набора библиотек. Все базовые функции хранятся в основной библиотеке (GL). Помимо основной, OpenGL включает в себя несколько дополнительных библиотек, которые могут подключаться как в виде отдельных модулей, так и в виде библиотек динамической компоновки (Dynamic Link Library - DLL).
Рис. 3.1 Организация библиотеки OpenGL
Библиотека GLU
GLU (OpenGL Utilities Library) содержит несколько подпрограмм, которые используют OpenGL для выполнения таких задач, как установка матриц для определенного ориентирования и проецирования просмотра, выполнение тесселяции многоугольников (разбиение произвольного многоугольника на выпуклые многоугольники) и визуализация поверхности. Библиотека GLU предоставляет множество возможностей моделирования: поверхности второго порядка, NURBS-кривые и NURBS-поверхности (Non-Uniform Rational B Spline - неравномерный рациональный B-сплайн). Библиотека GLU представляет собой стандартную часть реализации OpenGL. Существуют также наборы инструментов более высокого уровня, такие как FSG (Farengheit Scene Graph). Подпрограммы GLU используют префикс glu.
Библиотека GLUT
Для вывода изображения OpenGL-программы должны использовать механизмы системы управления окнами. Для этого можно вызывать функции API оконной системы, например, WinAPI, однако в этом случае приложение будет компилироваться только под одну выбранную оконную систему. Чтобы упростить задачу разработчикам, была создана библиотека GLUT (Graphics Library Utility Toolkit), которая представляет собой независимый от оконной системы инструментарий, написанный Марком Килгардом (Mark Kilgard) для того чтобы скрыть сложность программного интерфейса API различных оконных систем, отвечающих за создание окон, в которые будет производиться вывод генерируемых изображений, обработка нажатий клавиш клавиатуры, перемещение мыши и пр. Подпрограммы GLUT используют префикс glut. Функционально аналогичная библиотека GLX, интегрирующая Х Window с OpenGL, менее популярна.
Библиотека GLAUX
Вспомогательная библиотека GLAUX (OpenGL Auxiliary Library) содержит функции, создающие простые трёхмерные геометрические объекты, такие как сфера, куб, параллелепипед, цилиндр, конус и пр., функции, загружающие изображения из файлов, функции, работающие с окном вывода графики и т.д.
Синтаксис команд OpenGL
В названии команд OpenGL используется префикс gl и заглавные буквы для отделения слов, составляющих название команды (например, glClearColor()). Подобным же образом OpenGL определяет константы, начинающиеся с GL_ со всеми заглавными буквами и символом подчеркивания для отделения слов (например, GL_COLOR_BUFFER_BIT).
Следует также обратить внимание на буквы и цифры в конце названия некоторых команд (например, 3f в glColor3f() и glVertex3f()). Цифра 3 в названии команды glColor3f() означает, что она получает три аргумента, существует и другая версия, получающая четыре аргумента (четвертый – коэффициент прозрачности, называемый альфа - каналом). Буква f означает, что аргументы имеют формат числа с плавающей точкой. Подобное соглашение об именовании команд позволяет программисту использовать более удобный для него формат аргументов.
Некоторые команды воспринимают до восьми различных типов данных. Буквы, используемые в качестве суффиксов для указания конкретного типа данных в реализации OpenGL для ISO - стандарта языка C приведены в таблице 3.1.
Таблица 3.1. Суффиксы команд и соответствующие им типы аргументов
Суффиксы
| Тип данных
| Аналогичный тип языка С
| Тип, определенный в OpenGL
| b
| целое 8 бит
| signed char
| GLbyte
| s
| целое 16 бит
| short
| GLshort
| i
| целое 32 бита
| int или long
| GLint, GLsizei
| f
| число с плавающей точкой 32 бита
| float
| GLfloat, GLclampf
| d
| число с плавающей точкой 64 бита
| double
| GLdouble, GLclampd
| ud
| беззнаковое целое 8 бит
| unsigned char
| GLubyte, GLboolean
| us
| беззнаковое целое 16 бит
| unsigned short
| GLushort
| ui
| беззнаковое целое 32 бита
| unsigned int или unsigned long
| GLuint, GLenum, GLbitfield
|
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|