Рисование геометрических объектов
Как правило, задачей программы, использующей OpenGL, является обработка трехмерной сцены и интерактивное отображение в буфере кадра. Сцена состоит из набора трехмерных объектов, источников света и виртуальной камеры, определяющей текущее положение наблюдателя. Обычно приложение OpenGL в бесконечном цикле вызывает функцию обновления изображенияв окне. В этой функции и сосредоточены вызовы основных команд OpenGL. Типичная функция обновления изображения, как правило, состоит из трех шагов: 1. очистка буферовOpenGL; 2. установка положения наблюдателя; 3. преобразование и рисование геометрических объектов. Очистка буферов производится с помощью команд:
void glClearColor (clampf r, clampf g, clampf b, clampf a) void glClear (bitfield buf).
КомандаglClearColor устанавливает цвет, которым будет заполнен буфер кадра. Первые три параметра команды задают R,G и B компоненты цвета и должны принадлежать отрезку [0,1]. Четвертый параметр задает так называемую альфа-компоненту. Команда glClearочищает буферы, а параметр buf определяет комбинацию констант, соответствующую буферам, которые нужно очистить. Типичная программа вызывает команду
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
для очистки буферов цвета и глубины. Установка положения наблюдателя и преобразования трехмерных объектов (поворот, сдвиг и т.д.) контролируются с помощью задания матриц преобразования. Вершины и примитивы Вершинаявляется атомарным графическим примитивомOpenGL и определяет точку, конец отрезка, угол многоугольника и т.д. Все остальные примитивы формируются с помощью задания вершин, входящих в данный примитив. Например, отрезок определяется двумя вершинами, являющимися концами отрезка. С каждой вершиной ассоциируются ее атрибуты. В число основных атрибутов входят положениевершины в пространстве, цветвершины и вектор нормали. Положение вершины в пространстве Положениевершины определяются заданием ее координат в двух-, трех-, или четырехмерном пространстве (однородные координаты). Это реализуется с помощью нескольких вариантов команды glVertex*:
void glVertex[2 3 4][s i f d] (type coords) void glVertex[2 3 4][s i f d]v (type * coords)
Каждая команда задает четыре координаты вершины: x, y, z, w. Команда glVertex2* получает значения x и y. Координата z в таком случае устанавливается по умолчанию равной 0, координата w – равной 1. Vertex3* получает координаты x, y, z и заносит в координату w значение 1. Vertex4* позволяет задать все четыре координаты.
|