Файл: графическая библиотека opengl.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.06.2020

Просмотров: 1686

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 11

поверхностей

удаление

 

невидимых

 

фрагментов

 

изображений

работа

 

с

 

изображениями

 

на

 

уровне

 

пикселей

  

и

 

т

.

д

1.2. 

Интерфейс

 OpenGL 

OpenGL 

состоит

 

из

 

набора

 

библиотек

Все

 

базовые

 

функции

 

хранятся

 

в

 

основной

 

библиотеке

для

 

обозначения

 

которой

 

в

 

дальнейшем

 

мы

 

будем

 

использовать

 

аббревиатуру

 

GL.

 

Помимо

 

основной

, OpenGL 

включает

 

в

 

себя

 

несколько

 

дополнительных

 

библиотек

.  

Первая

 

из

 

них

 – 

библиотека

   

утилит

 

GL

(

GLU – GL Utility

). 

Все

 

функции

 

этой

 

библиотеки

 

определены

 

через

 

базовые

 

функции

 GL. 

В

 

состав

 GLU 

вошла

 

реализация

 

более

 

сложных

 

функций

таких

 

как

  

набор

 

популярных

 

геометрических

 

примитивов

  (

куб

шар

цилиндр

диск

), 

функции

 

построения

 

сплайнов

реализация

 

дополнительных

 

операций

 

над

 

матрицами

 

и

 

т

.

п

.  

 

 

 

 

 

 

 

 

OpenGL 

не

 

включает

 

в

 

себя

 

никаких

 

специальных

 

команд

 

для

 

работы

 

с

 

окнами

 

или

 

ввода

 

информации

 

от

 

пользователя

Поэтому

 

были

 

созданы

 

специальные

 

переносимые

 

библиотеки

 

для

 

обеспечения

 

часто

 

используемых

 

функций

 

взаимодействия

 

с

 

пользователем

 

и

 

для

 

отображения

 

информации

 

с

 

помощью

 

оконной

 

подсистемы

.  

Наиболее

 

популярной

 

является

 

библиотека

 GLUT (GL Utility Toolkit). 

Формально

 

GLUT 

не

 

входит

 

в

 OpenGL, 

но

 de facto 

включается

 

почти

 

во

 

все

 

его

 

дистрибутивы

 

и

 

имеет

 

реализации

 

для

 

различных

 

платформ

. GLUT 

предоставляет

 

только

 

минимально

 

необходимый

 

набор

 

функций

 

для

 

создания

 OpenGL-

приложения

Функционально

 

аналогичная

 

Рис

. 1 

Организация

 

библиотеки

 OpenGL 

 

Прикладная

 

программа

 

GLU 

GL 

GLUT 

GLX 

Win32 API 

 

Буфер

 

кадра

 


background image

 12

библиотека

 GLX 

менее

 

популярна

В

 

дальнейшем

 

в

 

этом

 

пособии

 

в

 

качестве

 

основной

 

будет

 

рассматриваться

 GLUT. 

Кроме

 

того

функции

специфичные

 

для

 

конкретной

 

оконной

 

подсистемы

обычно

 

входят

 

в

 

ее

 

прикладной

 

программный

 

интерфейс

Так

функции

поддерживающие

 

выполнение

 OpenGL, 

есть

 

в

 

составе

 

Win32 API 

и

 X Window. 

На

 

рисунке

 

схематически

 

представлена

 

организация

 

системы

 

библиотек

 

в

 

версии

работающей

 

под

 

управлением

 

системы

 Windows. 

Аналогичная

 

организация

 

используется

 

и

 

в

 

других

 

версиях

 OpenGL. 

1.3. 

Архитектура

 OpenGL 

Функции

 OpenGL 

реализованы

 

в

 

модели

 

клиент

-

сервер

Приложение

 

выступает

 

в

 

роли

 

клиента

 – 

оно

 

вырабатывает

 

команды

а

 

сервер

 

OpenGL 

интерпретирует

 

и

 

выполняет

 

их

Сам

 

сервер

 

может

 

находиться

 

как

 

на

 

том

 

же

 

компьютере

на

 

котором

 

находится

 

клиент

 (

например

в

 

виде

 

динамически

 

загружаемой

 

библиотеки

 – DLL), 

так

 

и

 

на

 

другом

 

(

при

 

этом

 

может

 

быть

 

использован

 

специальный

 

протокол

 

передачи

 

данных

 

между

 

машинами

). 

GL 

обрабатывает

 

и

 

рисует

 

в

 

буфере

 

кадра

 

графические

 

примитивы

 

с

 

учетом

 

некоторого

 

числа

 

выбранных

 

режимов

Каждый

 

примитив

 – 

это

 

точка

отрезок

многоугольник

 

и

 

т

.

д

Каждый

 

режим

 

может

 

быть

 

изменен

 

независимо

 

от

 

других

Определение

 

примитивов

выбор

 

режимов

 

и

 

другие

 

операции

 

описываются

 

с

 

помощью

 

команд

 

в

 

форме

 

вызовов

 

функций

 

прикладной

 

библиотеки

Примитивы

 

определяются

 

набором

 

из

 

одной

 

или

 

более

 

вершин

 

(vertex). 

Вершина

 

определяет

 

точку

конец

 

отрезка

 

или

 

угол

 

многоугольника

С

 

каждой

 

вершиной

 

ассоциируются

 

некоторые

 

данные

 

(

координаты

цвет

нормаль

текстурные

 

координаты

 

и

 

т

.

д

.), 

называемые

 

атрибутами

В

 

подавляющем

 

большинстве

 

случаев

 

каждая

 

вершина

 

обрабатывается

 

независимо

 

от

 

других

С

 

точки

 

зрения

 

архитектуры

 

графическая

 

система

 OpenGL 

является

 

конвейером

состоящим

 

из

 

нескольких

 

последовательных

 

этапов

 

обработки

 

графических

 

данных

Команды

 OpenGL 

всегда

 

обрабатываются

 

в

 

том

 

порядке

в

 

котором

 

они

 

поступают

хотя

 

могут

 

происходить

 

задержки

 

перед

 

тем

как

 

проявится

 

эффект

 

от

 

их

 

выполнения

В

 

большинстве

 

случаев

 OpenGL 

предоставляет

 

непосредственный

 

интерфейс

т

.

е

определение

 

объекта

 

вызывает

 

его

 

визуализацию

 

в

 

буфере

 

кадра


background image

 13

С

 

точки

 

зрения

 

разработчиков

, OpenGL – 

это

 

набор

 

команд

которые

 

управляют

 

использованием

 

графической

 

аппаратуры

Если

 

аппаратура

 

состоит

 

только

 

из

 

адресуемого

 

буфера

 

кадра

тогда

 OpenGL 

должен

 

быть

 

реализован

 

полностью

 

с

 

использованием

 

ресурсов

 

центрального

 

процессора

Обычно

 

графическая

 

аппаратура

 

предоставляет

 

различные

 

уровни

 

ускорения

от

 

аппаратной

 

реализации

 

вывода

 

линий

 

и

 

многоугольников

 

до

 

изощренных

 

графических

 

процессоров

 

с

 

поддержкой

 

различных

 

операций

 

над

 

геометрическими

 

данными

.  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OpenGL 

является

 

прослойкой

 

между

 

аппаратурой

 

и

 

пользовательским

 

уровнем

что

 

позволяет

 

предоставлять

 

единый

 

интерфейс

 

на

 

разных

 

платформах

используя

 

возможности

 

аппаратной

 

поддержки

Кроме

 

того

, OpenGL 

можно

 

рассматривать

 

как

 

конечный

 

автомат

состояние

 

которого

 

определяется

 

множеством

 

значений

 

специальных

 

переменных

   

и

 

значениями

 

текущей

 

нормали

цвета

координат

 

Рис

. 2. 

Функционирование

 

конвейера

 OpenGL 

Аппроксимация

 

кривых

 

и

 

поверхностей

 

Обработка

 

вершин

 

и

 

сборка

 

примитивов

 

Растеризация

 

и

 

обработка

 

фрагментов

 

Операции

 

над

 

пикселями

 

 

Передача

 

данных

 

в

 

буфер

 

кадра

 

Текстуры

 

Атрибуты

 

вершин

 

Источники

 

света

 


background image

 14

текстуры

 

и

 

других

 

атрибутов

 

и

 

признаков

Вся

 

эта

 

информация

 

будет

 

использована

 

при

   

поступлении

 

в

 

графическую

 

систему

 

координат

 

вершины

 

для

 

построения

 

фигуры

в

 

которую

 

она

 

входит

Смена

 

состояний

 

происходит

 

с

 

помощью

 

команд

которые

 

оформляются

 

как

 

вызовы

 

функций

1.4. 

Синтаксис

 

команд

 

Определения

 

команд

 GL 

находятся

 

в

 

файле

 gl.h, 

для

 

включения

 

которого

 

нужно

 

написать

 

#include <gl/gl.h> 
 

Для

 

работы

 

с

 

библиотекой

 GLU 

нужно

 

аналогично

 

включить

 

файл

 

glu.h. 

Версии

 

этих

 

библиотек

как

 

правило

включаются

 

в

 

дистрибутивы

 

систем

 

программирования

например

 Microsoft Visual C++ 

или

 Borland 

C++ 5.02. 

В

 

отличие

 

от

 

стандартных

 

библиотек

пакет

 GLUT 

нужно

 

инсталлировать

 

и

 

подключать

 

отдельно

Подробная

 

информация

 

о

 

настройке

 

сред

 

программирования

 

для

 

работы

 

с

 OpenGL 

дана

 

в

 

Приложении

 

С

Все

 

команды

 (

процедуры

 

и

 

функции

библиотеки

 GL 

начинаются

 

с

 

префикса

 gl, 

все

 

константы

    – 

с

 

префикса

 GL_. 

Соответствующие

 

команды

 

и

 

константы

 

библиотек

 GLU 

и

 GLUT 

аналогично

 

имеют

 

префиксы

 glu (GLU_) 

и

 glut (GLUT_) 

Кроме

 

того

в

 

имена

 

команд

 

входят

 

суффиксы

несущие

 

информацию

 

о

 

числе

 

и

 

типе

 

передаваемых

 

параметров

В

 OpenGL 

полное

 

имя

 

команды

 

имеет

 

вид

 

type 

glCommand_name[1 2 3 4][b s i f d ub us ui][v]

  

                   (type1 

arg1

,…,typeN 

argN

 

Имя

 

состоит

 

из

 

нескольких

 

частей

 

gl

 

имя

 

библиотеки

в

 

которой

 

описана

 

эта

 

функция

для

 

базовых

 

функций

 OpenGL, 

функций

 

из

 

библиотек

 GL, GLU, GLUT, 

GLAUX 

это

 gl, glu, glut, aux 

соответственно

Command_name

 

имя

 

команды

 (

процедуры

 

или

 

функции


background image

 15

[1 2 3 4]

  

 

число

 

аргументов

 

команды

  

[b s i f d ub us ui] 

тип

 

аргумента

символ

 b –  GLbyte (

аналог

 char 

в

 

С

\

С

++), 

символ

 i – GLint  (

аналог

 int), 

символ

 

f – GLfloat (

аналог

 float) 

и

 

так

  

далее

Полный

 

список

 

типов

 

и

 

их

 

описание

 

можно

 

посмотреть

 

в

 

файле

 gl.h 

[v]

 

наличие

 

этого

 

символа

 

показывает

что

 

в

 

качестве

 

параметров

 

функции

 

используется

 

указатель

 

на

 

массив

 

значений

  

Символы

 

в

 

квадратных

 

скобках

 

в

 

некоторых

 

названиях

 

не

 

используются

Например

команда

 

glVertex2i()

 

описана

 

в

 

библиотеке

 

GL, 

и

 

использует

 

в

 

качестве

 

параметров

 

два

 

целых

 

числа

а

 

команда

 

glColor3fv()

 

использует

 

в

 

качестве

 

параметра

 

указатель

 

на

 

массив

 

из

 

трех

 

вещественных

 

чисел

Использования

 

нескольких

 

вариантов

 

каждой

 

команды

 

можно

 

частично

 

избежать

применяя

 

перегрузку

 

функций

 

языка

 C++. 

Но

 

интерфейс

 OpenGL 

не

 

рассчитан

 

на

 

конкретный

 

язык

 

программирования

и

следовательно

должен

 

быть

 

максимально

 

универсален

1.5. 

Пример

 

приложения

 

Типичная

 

программа

использующая

 OpenGL, 

начинается

 

с

 

определения

 

окна

в

 

котором

 

будет

 

происходить

 

отображение

Затем

 

создается

 

контекст

  (

клиент

) OpenGL 

и

 

ассоциируется

 

с

 

этим

 

окном

Далее

 

программист

 

может

 

свободно

 

использовать

 

команды

 

и

 

операции

 

OpenGL API.  

Ниже

 

приведен

 

текст

 

небольшой

 

программы

написанной

 

с

 

использованием

 

библиотеки

 GLUT – 

своеобразный

 

аналог

 

классического

 

примера

 “Hello, World!”. 

Все

что

 

делает

 

эта

 

программа

 – 

рисует

 

в

 

центре

 

окна

 

красный

 

квадрат

Тем

 

не

 

менее

даже

 

на

 

этом

 

простом

 

примере

 

можно

 

понять

 

принципы

 

программирования

 

с

 

помощью

 OpenGL. 

#include <stdlib.h> 
 
/* 

подключаем

 

библиотеку

 GLUT */ 

#include <gl/glut.h> 
 
/* 

начальная

 

ширина

 

и

 

высота

 

окна

 */