
- •1. Цели и задачи компьютерной графики
- •2. Растровая и векторная визуализация изображений. Основные характеристики растровых изображений
- •3. Аддитивная цветовая модель rgb. Кодирование цвета. Палитра
- •4. Графические форматы. Работа с растровыми изображениями (форматы ddb, dib, bmp-файлы)
- •5. Понятие об инкрементных алгоритмах растеризации. Растровое представление отрезка. Вывод и реализация алгоритма
- •6. Понятие об инкрементных алгоритмах растеризации. Построение окружности методом средней точки. Вывод и реализация алгоритма
- •7. Стиль линии (перо). Алгоритм вывода линии
- •8. Стиль заполнения, кисть, текстура
- •9. Геометрические основы компьютерной графики. Системы координат (декартова, полярная, сферическая) и векторы. Скалярное и векторное произведение векторов
- •11. Построение кривых. Интерполяционный полином Лагранжа. Достоинства и недостатки. Реализация
- •12. Построение кривых. Интерполяционный кубический сплайн. Реализация
- •13. Построение кривых. Геометрические сплайны. Кривая Безье. Геометрический алгоритм построения кривой Безье. Реализация
- •14. Мировые и экранные координаты. Алгоритм пересчёта мировых 2d-координат в оконные. Вывод и реализация
- •15. Физическая и логическая системы координат. Режимы отображения (без настройки параметров). Алгоритм преобразования координат в gdi и его связь с алгоритмом пересчёта мировых координат в оконные
- •16. Режимы отображения и настройка их параметров (функции класса cdc mfc). Функция SetMyMode, назначение, параметры и реализация
- •17. Аффинные преобразования на плоскости. Преобразование системы координат: смещение, растяжение-сжатие, поворот
- •18. Аффинные преобразования на плоскости. Преобразование объектов: смещение, растяжение-сжатие, поворот
- •19. Аффинные преобразования в пространстве. Преобразование системы координат: смещение, растяжение-сжатие, повороты вокруг осей координат
- •20. Аффинные преобразования в пространстве. Преобразования объектов: смещение, растяжение-сжатие, повороты вокруг осей координат
- •21. Основные типы проекций. Видовая система координат (вывод матрицы преобразования)
- •22. Перспективные преобразования (вывод матрицы преобразования). Схема пересчёта координат при переходе от мировых 3d-координат к экранным
- •23. Модели описания поверхностей
- •24. Каркасная визуализация трёхмерных изображений. Принцип удаления невидимых граней для выпуклого многогранника. Реализация
- •30. Графическая библиотека OpenGl. Структура glut-приложения. Пример
- •31. Графическая библиотека OpenGl. Рисование графических примитивов. Дисплейные списки. Удаление нелицевых граней. Вывод текста. Примеры
- •Вершины и примитивы
- •Положение вершины в пространстве
- •Цвет вершины
- •Нормаль
- •Операторные скобки glBegin / glEnd
- •Дисплейные списки
- •Массивы вершин
- •32. Графическая библиотека OpenGl. Системы координат. Модельно-видовые преобразования. Примеры
- •Матрицы
- •Модельно-видовые преобразования
- •33. Графическая библиотека OpenGl. Проекции. Область вывода. Создание анимации. Примеры
- •Область вывода
- •Создание анимации в OpenGl
- •34. Графическая библиотека OpenGl. Материалы и освещение. Примеры
- •Модель освещения
- •Описание источников света
- •35. Графическая библиотека OpenGl. Структура приложения с использованием библиотеки mfc
31. Графическая библиотека OpenGl. Рисование графических примитивов. Дисплейные списки. Удаление нелицевых граней. Вывод текста. Примеры
Как правило, задачей программы, использующей OpenGL, является обработка трехмерной сцены и интерактивное отображение в буфере кадра. Сцена состоит из набора трехмерных объектов, источников света и виртуальной камеры, определяющей текущее положение наблюдателя. Обычно приложение OpenGL в бесконечном цикле вызывает функцию обновления изображения в окне. В этой функции и сосредоточены вызовы основных команд OpenGL. Если используется библиотека GLUT, то это будет функция с обратным вызовом, зарегистрированная с помощью вызова glutDisplayFunc(). GLUT вызывает эту функцию, когда операционная система информирует приложение о том, что содержимое окна необходимо перерисовать (например, если окно было перекрыто другим). Создаваемое изображение может быть как статичным, так и анимированным, т.е. зависеть от каких-либо параметров, изменяющихся со временем. В этом случае лучше вызывать функцию обновления самостоятельно. Например, с помощью команды glutPostRedisplay(). Типичная функция обновления изображения, как правило, состоит из трех шагов:
очистка буферов OpenGL;
установка положения наблюдателя;
преобразование и рисование геометрических объектов.
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.