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

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

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

Добавлен: 09.06.2020

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

Скачиваний: 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> 
 
/* 

начальная

ширина

и

высота

окна

 */