Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Архитектура OpenGL и синтаксис команд (км)



 

Работа OpenGL реализована в модели клиент-сервер. Приложение выступает в роли клиента – оно вырабатывает команды, а сервер OpenGL интерпретирует и выполняет их. Сам сервер может находиться как на том же компьютере, на котором находится клиент (например, в виде динамически загружаемой библиотеки – DLL ), так и на другом (при этом может быть использован специальный протокол передачи данных между машинами).

 

С точки зрения разработчиков, OpenGL – это набор команд, которые управляют использованием графической аппаратуры. Если аппаратура состоит только из адресуемого буфера кадра, тогда OpenGL должен быть реализован полностью с использованием ресурсов центрального процессора. Обычно графическая аппаратура предоставляет различные уровни ускорения: от аппаратной реализации вывода линий и многоугольников до изощренных графических процессоров с поддержкой различных операций над геометрическими данными.

OpenGL является прослойкой между аппаратурой и пользовательским уровнем, что позволяет предоставлять единый интерфейс на разных платформах, используя возможности аппаратной поддержки.

С точки зрения архитектуры, графическая система OpenGL является конвейером, состоящим из нескольких этапов обработки данных:

 

· Аппроксимация кривых и поверхностей

· Обработка вершин и сборка примитивов

· Растеризация и обработка фрагментов

· Операции над пикселями

· Подготовка текстуры

· Передача данных в буфер кадра

 

Вообще, OpenGL можно сравнить с конечным автоматом, состояние которого определяется множеством значений специальных переменных (их имена обычно начинаются с символов GL_ ) и значениями текущей нормали, цвета и координат текстуры. Все эта информация используется при поступлении вершины (минимальный графический примитив для построения фигуры) в систему координат, в которую она входит. Смена состояний происходит с помощью команд, которые оформляются как вызовы функций библиотеки.

Синтаксис команд

Все команды (процедуры и функции) библиотеки 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 - имя библиотеки, в которой описана эта функция; gl - для базовых функций OpenGL, для функций из библиотек GL, GLU, GLUT, GLAUX это gl, glu, glut, aux соответственно.

· Command_name - имя команды (процедуры или функции);

· [1 2 3 4] - число аргументов команды;

· [b s i f d ub us ui] - тип аргумента; символ b – GLbyte (аналог char в С\С++ ), символ i – GLint (аналог int ), символ f – GLfloat (аналог float ) и т.д. (полный список типов и их описание можно посмотреть в файле gl.h )

· [v] - наличие этого символа показывает, что в качестве параметров функции используется указатель на массив значений;

Символы в квадратных скобках в некоторых командах не используются.

11. Рисование. Буфер. Обновление изображения. (км)

Рисование в OpenGL. Буфер. Обновление изображения. (км)

 

Как правило, задачей программы, использующей OpenGL, является создание трехмерной сцены и ее интерактивное отображение в буфере кадра. Сцена может состоять из набора трехмерных объектов, источников света и виртуальной камеры, определяющей текущее положение наблюдателя.

Что такое буфер?

Буфер в OpenGL – это по существу 2-х мерный массив величин, который соответствует пикселю в окне изображения, либо изображению вне экрана. Каждый буфер имеет то же количество строк и столбцов (высота и ширина) как и клиентская область окна, но содержит отличающийся диапазоном и типом набор величин

OpenGL обеспечивает несколько типов буферов связанных с определенным графическим содержимым.

· Color buffer (буфер цвета) - хранит цвет пикселя в формате RGBA (красный, зеленый, синий, альфа).

· Depth buffer (буфер глубины) - хранит информацию необходимую для удаления невидимых линий.

· Stencil buffer (буфер шаблонов или трафарета) применяется для блокировки определенных областей экрана, например, так можно рисовать тени.

· Accumulation buffer (буфер накопления) предназначен для таких эффектов как размытие движения ( motion blur ), имитация глубины резкости пространства ( depth of field )

 

Так же есть расширение буфера цвета - буфер кадра. Он может поддерживать двойную буферизацию необходимую для анимации.

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

Обновление изображения

Обычно приложение OpenGL в бесконечном цикле вызывает функцию обновления изображения в окне (анимация). В этой функции и сосредоточены вызовы основных команд OpenGL. Создаваемое изображение может быть как статичным, так и динамичным, т.е. зависеть от каких-либо параметров, изменяющихся со временем.

Чем же занимается типичная функция обновления изображения? Как правило, она выполняет следующие действия:

 

1. очистка буферов OpenGL;

2. рисование сцены

3. переключение межу передним и задним буфером кадра (при анимации)

 

Очистка буферов в начале нужна в любом случае, чтобы предыдущая информация в буферах не смешивалась с новой, которая будет заноситься в буфер. Это действие производится с помощью команды:

 

void glClear (bitfield buf);

 

Команда glClear очищает буферы, а параметр buf определяет комбинацию констант, соответствующую буферам, которые нужно очистить (см. разд. операции с пикселями). Типичная программа вызывает команду glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) для очистки буферов цвета и глубины..

 

Так же есть команда:

 

void glClearColor ( clampf r, clampf g, clampf b, clampf a);

 

которая устанавливает цвет, которым будет заполнен буфер кадра. Первые три параметра команды задают R, G и B компоненты цвета и должны принадлежать отрезку [0, 1]. Четвертый параметр задает прозрачность (альфа компоненту). Как правило, он равен 1. По умолчанию цвет – черный (0, 0, 0, 1).

Переключение межу передним и задним буфером кадра для ОС Windows производится при помощи команды:

void SwapBuffers (HDC).

12 Вершины, примитивы, и их атрибуты. (км)


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 1273; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.015 с.)
Главная | Случайная страница | Обратная связь