Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Архитектура 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; Нарушение авторского права страницы