Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KGiG_-_shpory.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6.14 Mб
Скачать

31. Графическая библиотека OpenGl. Рисование графических примитивов. Дисплейные списки. Удаление нелицевых граней. Вывод текста. Примеры

Как правило, задачей программы, использующей OpenGL, является обработка трехмерной сцены и интерактивное отображение в буфере кадра. Сцена состоит из набора трехмерных объектов, источников света и виртуальной камеры, определяющей текущее положение наблюдателя. Обычно приложение OpenGL в бесконечном цикле вызывает функцию обновления изображения в окне. В этой функции и сосредоточены вызовы основных команд OpenGL. Если используется библиотека GLUT, то это будет функция с обратным вызовом, зарегистрированная с помощью вызова glutDisplayFunc(). GLUT вызывает эту функцию, когда операционная система информирует приложение о том, что содержимое окна необходимо перерисовать (например, если окно было перекрыто другим). Создаваемое изображение может быть как статичным, так и анимированным, т.е. зависеть от каких-либо параметров, изменяющихся со временем. В этом случае лучше вызывать функцию обновления самостоятельно. Например, с помощью команды glutPostRedisplay(). Типичная функция обновления изображения, как правило, состоит из трех шагов:

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

  2. установка положения наблюдателя;

  3. преобразование и рисование геометрических объектов.

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

Рис. 3

Для очистки окна (экрана, внутренних буферов) служит команда

void glClear(GLbitfield buf),

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

Значение переменной buf

Комментарий

GL_COLOR_BUFFER_BIT

Очистить буфер изображения (фрейм - буфер)

GL_DEPTH_BUFFER_BIT

Очистить z - буфер

GL_ACCUM_BUFFER_BIT

Очистить аккумулирующий буфер

GL_STENSIL_BUFFER_BIT

Очистить буфер трафарета

Типичная программа вызывает команду

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

для очистки буферов цвета и глубины.

При этом цвет, которым очищается буфер изображения, задается командой

void glClearColor ( GLclampf red, GLclampf green, GLclampf blue,

GLclampf alpha )

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

Установка положения наблюдателя и преобразования трехмерных объектов (поворот, сдвиг и т.д.) контролируются с помощью задания матриц преобразования. Преобразования объектов и настройка положения виртуальной камеры рассмотрены ниже.

Рассмотрим вопрос о том, как передать в OpenGL описания объектов, находящихся в сцене. Каждый объект является набором примитивов OpenGL.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]