Астана ( )Компьютерная графика (лекция 6) ВВЕДЕНИЕ В OPENGL Лекция 6
Астана ( )Компьютерная графика (лекция 6) План лекции Что такое OpenGL Работа с библиотекой Обзор архитектуры Функции OpenGL –Определение объектов –Преобразование координат –Освещение
Астана ( )Компьютерная графика (лекция 6) Синтез изображений for each polygon in model project polygon onto viewing plane for each pixel in polygon calculate pixel colour calculate pixel z-value compare pixel z-value to value stored for pixel in z- buffer if pixel is closer, draw it in frame-buffer and z-buffer end
Астана ( )Компьютерная графика (лекция 6) Что такое OpenGL? OpenGL - прикладной программный интерфейс (API – Application Programming Interface) для разработки приложений в области трехмерной графики. Был утвержден в 1992 году –Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc. Основная функция: интерактивная визуализация трехмерных моделей
Астана ( )Компьютерная графика (лекция 6) Возможности Вывод цветных изображений высокого качества, составленных из геометрических и других примитивов Расчет освещения от нескольких источников света Текстурирование Удаление невидимых поверхностей Анимация, трехмерные преобразования
Астана ( )Компьютерная графика (лекция 6) Почему OpenGL? Аналогичные библиотеки: DirectX (Direct3D), Java 3D OpenGL –Стабильность (с 1992 г.) –Переносимость Независимость от оконной и операционной системы –Легкость применения Простой интерфейс, реализации для различных ЯП
Астана ( )Компьютерная графика (лекция 6) Организация OpenGL Состоит из набора библиотек Прикладная программа GLU GL GLUT GLX Win32 API Буфер кадра
Астана ( )Компьютерная графика (лекция 6) Сопутствующие API AGL, GLX, WGL –Связь между OpenGL и оконной системой GLU (OpenGL Utility Library) –Часть OpenGL –NURBS, tessellators, quadric shapes, etc GLUT (OpenGL Utility Tookkit) –Переносимый оконный API –Неофициальная часть OpenGL
Астана ( )Компьютерная графика (лекция 6) OpenGL и сопутствующие API Application program X, Win32, Mac OS GL Software and/or hardware GLU GLX, AGL or WGL GLUT OpenGL motif widget or similar
Астана ( )Компьютерная графика (лекция 6) Терминология Графический примитив –Точка, линия, многоугольник и т.д. Команда OpenGL –Вызов функции библиотеки Вершина –Определяет точку, конец отрезка или угол многоугольника Атрибут вершины –Цвет, нормаль, текстурные координаты и т.д.
Астана ( )Компьютерная графика (лекция 6) Архитектура OpenGL Клиент-сервер –Клиент - приложение Конвейер –Данные обрабатываются последовательно, в несколько этапов. Набор команд –Использует аппаратуру, если возможно Конечный автомат –Значение переменных – состояние –Команды изменяют состояние
Астана ( )Компьютерная графика (лекция 6) Конвейер Аппроксимация кривых и поверхностей Обработка вершин и сборка примитивов Растеризация и обработка фрагментов Операции над пикселями Передача данных в буфер кадра Текстуры Атрибуты вершин Источники света
Астана ( )Компьютерная графика (лекция 6) Функции OpenGL Описание примитивов Описание источников света Задание атрибутов Визуализация Геометрические преобразования
Астана ( )Компьютерная графика (лекция 6) Начальные cведения Заголовочные файлы –#include Библиотеки Перенумерованные типы –OpenGL определяет перенумерованные типы для совместимости GLfloat, GLint, GLenum и т.д
Астана ( )Компьютерная графика (лекция 6) Формат команд OpenGL glVertex3fv ( v ) 2 – (x, y) 3 – (x, y, z) 4 – (x, y, z, w) Число компонент B – byte ub – unsigned byte s – short us – unsigned short I – int ui – unsigned int f – float d – double Тип данных «v» отсутствует для скалярных форм glVertex2f(x,y) Вектор
Астана ( )Компьютерная графика (лекция 6) Пример кода Цветной треугольник glBegin(GL_TRIANGLES) glColor2f(0.0f,1.0f); glVertex2f(50, 150); glVertex2f(200, 200); glEnd();
Астана ( )Компьютерная графика (лекция 6) Определение объектов сцены Тип примитива + набор вершин + набор атрибутов = объект Набор объектов + набор источников света + камера = сцена Изменение положения камеры = перемещение по сцене. Изменение положения объектов в сцене или атрибутов = анимация
Астана ( )Компьютерная графика (лекция 6) Геометрические примитивы GL_POINTSGL_LINESGL_LINE_STR IP GL_LINE_LO OP GL_POLIGONGL_TRIANGL ES GL_QUADS GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD_STRIP E
Астана ( )Компьютерная графика (лекция 6) Определение примитивов OpenGL Примитивы определяются, используя: glBegin( prim_type ); glEnd(); prim_type определяет, каким образом будут комбинироваться вершины
Астана ( )Компьютерная графика (лекция 6) Основные атрибуты Атрибуты вершины (vertex) –Положение в пространстве –Материал –Цвет –Нормаль Внимание: всегда используется ТЕКУЩИЙ набор атрибутов –OpenGL – конечный автомат
Астана ( )Компьютерная графика (лекция 6) Пример кода Цветной треугольник glBegin(GL_TRIANGLES) glColor2f(0.0f,1.0f); glVertex2f(50, 150); glVertex2f(200, 200); glEnd(); Внимание: операторные скобки!
Астана ( )Компьютерная графика (лекция 6) Процесс визуализации 1.Задать окно для рисования 2.Определить константные атрибуты и свойства (источники света, текстуры и т.д.) 3.На каждом кадре: 1.Очистить окно 2.Задать положение наблюдателя 3.Для каждого объекта 1.Определить преобразование 2.Передать атрибуты 3.Передать геометрию
Астана ( )Компьютерная графика (лекция 6) Преобразования в OpenGL Модельное преобразования Видовые преобразования –Ориентация камеры Проекция на плоскость камеры Перевод в систему координат устройства
Астана ( )Компьютерная графика (лекция 6) Виртуальная камера Камера Штатив Модель Видимый объем
Астана ( )Компьютерная графика (лекция 6) Виртуальная камера и преобразования Преобразование проекции –Настройка линз камеры Видовое преобразование –Изменение положения камеры в пространстве Модельное преобразование –Изменение положения модели в пространстве Оконные (viewport) преобразования –Изменение размеров готовой фотографии
Астана ( )Компьютерная графика (лекция 6) Координатные системы и преобразования Шаги для формирования изображения –Определение геометрии (мировая системы координат) –Определение камеры (видовая система координат) –Проецирование (оконная система координат) –Перевод в экранные координаты (экранная система координат) Каждый шаг использует преобразования Каждая трансформация эквивалентна изменению системы координат
Астана ( )Компьютерная графика (лекция 6) 3D преобразования Каждая вершина транформируется с помощью матриц 4x4 –Все аффиные операции – умножения матриц –Все матрицы хранятся построчно в OpenGL
Астана ( )Компьютерная графика (лекция 6) Определение преобразований в OpenGL Программист имеет два стиля определения преобразований –Определяя матрицы (glLoadMatrix, glMultMatrix) –Определяя операции (glRotate, glOrtho) Программист не обязан помнить точные формулы для вычисления матриц
Астана ( )Компьютерная графика (лекция 6) Конвейер
Астана ( )Компьютерная графика (лекция 6) Пример (1)
Астана ( )Компьютерная графика (лекция 6) Пример (2)
Астана ( )Компьютерная графика (лекция 6) Пример (3)
Астана ( )Компьютерная графика (лекция 6) Пример (4)
Астана ( )Компьютерная графика (лекция 6) Применение преобразований проекции Типичное использование glMatrixMode ( GL_PROJECTION ); glLoadIdentity (); glOrtho ( left, right, bottom, top, zNear, zFar)
Астана ( )Компьютерная графика (лекция 6) Видовые преобразования Установка «штатива» камеры, настройка объектива Чтобы «летать» по сцене –Задать видовое преобразование и перерисовать сцену gluLookAt( eye x, eye y, eye z, aim x, aim y, aim z, up x, up y, up z )
Астана ( )Компьютерная графика (лекция 6) Связь между модельным и видовыми преобразованиями Перемещение камеры = перемещение каждого объекта по отношению к фиксированной камере. Видовое преобразование эквивалентно нескольким модельным преобразованиям.
Астана ( )Компьютерная графика (лекция 6) Левая и правая системы координат Преобразования проекции используют левую систему координат –Znear и Zfar – просто расстояния от точки зрения Во всех остальных случаях OpenGL использует правую систему координат леваяправая x y z+ x y
Астана ( )Компьютерная графика (лекция 6) Принципы освещения Составляющие модели освещения OpenGL –Материал объекта определяет его своейста его поверхности –Цвет и положение источника света –Глобальные параметры освещения рассеянный свет
Астана ( )Компьютерная графика (лекция 6) Модель Фонга ambient = Ka, diffuse = Kd * cos(N, L), specular = Ks * (cos (R, V)) Ns intensity = ambient + amp * (diffuse + specular).
Астана ( )Компьютерная графика (лекция 6) Как устроено освещение в OpenGL Модель Фонга –Вычисляется на вершинах Составляющие модели освещения –Свойства материала поверхности –Свойства источника света –Свойства модели освещения
Астана ( )Компьютерная графика (лекция 6) Свойства материала Определение свойств материала для примитива glMaterialfv (face, property, value) GL_DIFFUSE GL_SPECULAR GL_AMBIENT GL_EMISSION GL_SHININESS
Астана ( )Компьютерная графика (лекция 6) Свойства источника света glLightfv ( light, property, value ) – цвет источника – положение – затухание
Астана ( )Компьютерная графика (лекция 6) Типы источников света OpenGL поддерживает два типа источников света –Локальные (точечные) источники –Бесконечно удаленные (параллельные) источники Тип определяется координатой w –w = 0 параллельный источник –W 0 точечный источник (x / w, y / w, z /w)