СИНТАКСИС КОМАНД
Синтаксис полного имени команды имеет вид:
rt glCom_name[l 2 3 4][b s i f d ub us ui][v] (typel arg7,...,typeN argN) Таким образом, имя состоит из нескольких частей:
|
GI |
Это имя библиотеки, в которой описана эта функция: для базовых функций OpenGL, функций из библиотек GLU, GLUT, GLAUX |
|
it |
Определяет тип возвращаемого значения и для каждой команды указывается в явном виде |
|
Com_name |
Имя команды, например glColor или glVertex |
|
[12 3 4] |
Цифра, показывающая число аргументов команды |
|
[b s i f d ub us uij |
Симолы, определяющие тип аргумента: символ b означает тип GLbyte (аналог char в СС++), символ f -тип GLfloat (аналог float), символ i - тип GLint (аналог int) и т.д. Полный список типов и их описание можно посмотреть в файле gl.h |
|
[v] |
Наличие этого символа показывает, что в качестве параметров функции используется указатель на массив значений |
Компоненты, представленные в квадратных скобках, в некоторых названиях не используются.
Например, команда для определения вершины, имеющая вид: void glVertex3f(float argl, float arg2, float arg3) в представленном синтаксисе записывается в виде void glVertex3[f](atype arg).
Благодаря тому, что OpenGL реализован по модели клиент-сервер, то имеется возможность управлять процессом рисования примитивов. Для этого в OpenGL существуют две команды:
void glFinish()
void glFlush()
Команда glFinish() приостанавливает выполнение программы, пока не будут завершены все вызванные перед ней команды OpenGL.
Команда glFlush() вызывает немедленное рисование ранее переданных команд.
ПРОЦЕСС РЕГЕНЕРАЦИИ ИЗОБРАЖЕНИЯ
Основной задачей программы, использующей OpenGL, является обработка трехмерной сцены и интерактивное отображение в буфере кадра ее проекции. Для динамической графики приложение OpenGL в бесконечном цикле должно вызывать функцию регенерации (обновления) изображения.
Обычно функция регенерации изображения состоит из следующих шагов:
- 1. Очистка буферов ( цвета, глубины сцены и т.п.) OpenGL.
- 2. Установка положения наблюдателя (виртуальной камеры).
- 3. Преобразование и рисование геометрических объектов.
Очистка буферов производится с помощью команд:
void glClearColor ( clampf г, clampf g, clampf b, clampf a )
void glClear (bitfield buf)
Команда glClearColor устанавливает цвет, которым будет заполнен буфер кадра. Первые три параметра команды задают R, G и В компоненты цвета и должны принадлежать интервалу значений [0, 1]. Четвертый параметр задает так называемую альфа-компоненту (прозрачность). Если этот параметр равен 1, то цвет не прозрачный. По умолчанию цвет - черный (0, 0, 0, 1).
Команда glClear очищает буферы, а параметр buf определяет какие именно буферы нужно очистить. Данный параметр формирует маску для очистки комбинацией (логической функцией OR) констант.
Маска
GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT
GL_ACCUM_BUFFER_BIT
GL STENCIL BUFFER BIT
Буфер для очистки
Буфер изображения
Z-буфер
Аккумулирующий буфер
Буфер трафарета
Например, в программах для очистки буферов цвета и глубины (Z-буфера) вызывают команду:
glClear(GL_COLOR_BUFFER_BIT I GL_DEPTH_BUFFER_BIT)
Установка положения наблюдателя (виртуальной камеры) и преобразования трехмерных объектов (масштабирование, поворот и т.д.) выполняются с помощью задания соответствующих матриц преобразования. Подробное рассмотрение преобразований объектов и настройки положения виртуальной камеры будут приведены далее.
Для улучшения качества визуализации динамически изменяющихся сцен рекомендуется использовать двойную буферизацию, т.е. необходимо обеспечить перезапись внеэкранного буфера в основной. Для этого предусмотрена команда BOOL SwapBuffers (HDC hDC);
Следует помнить, что после выполнения команды SwapBuffers(hDC) содержание внеэкранного буфера не определено.