500 likes | 920 Views
ВВЕДЕНИЕ В OPENGL. Лекция 6. План лекции. Что такое OpenGL Работа с библиотекой Обзор архитектуры Функции OpenGL Определение объектов Преобразование координат Освещение. Синтез изображений. for each polygon in model project polygon onto viewing plane for each pixel in polygon
E N D
ВВЕДЕНИЕ В 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 end Компьютерная графика (лекция 6)
Что такое OpenGL? • OpenGL - прикладной программный интерфейс (API – Application Programming Interface) для разработки приложений в области трехмерной графики. • Был утвержден в 1992 году • Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc. • Основная функция: интерактивная визуализация трехмерных моделей Компьютерная графика (лекция 6)
Возможности • Вывод цветных изображений высокого качества, составленных из геометрических и других примитивов • Расчет освещения от нескольких источников света • Текстурирование • Удаление невидимых поверхностей • Анимация, трехмерные преобразования Компьютерная графика (лекция 6)
Почему OpenGL? • Аналогичные библиотеки:DirectX (Direct3D), Java 3D • OpenGL • Стабильность (с 1992 г.) • Переносимость • Независимость от оконной и операционной системы • Легкость применения • Простой интерфейс, реализации для различных ЯП Компьютерная графика (лекция 6)
GLU GL Буфер кадра Прикладная программа GLUT Win32 API GLX Организация OpenGL • Состоит из набора библиотек Компьютерная графика (лекция 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 OpenGL motif widgetor similar GLX, AGL or WGL GLUT GLU Software and/or hardware Компьютерная графика (лекция 6)
Терминология • Графический примитив • Точка, линия, многоугольник и т.д. • Команда OpenGL • Вызов функции библиотеки • Вершина • Определяет точку, конец отрезка или угол многоугольника • Атрибут вершины • Цвет, нормаль, текстурные координаты и т.д. Компьютерная графика (лекция 6)
Архитектура OpenGL • Клиент-сервер • Клиент - приложение • Конвейер • Данные обрабатываются последовательно, в несколько этапов. • Набор команд • Использует аппаратуру, если возможно • Конечный автомат • Значение переменных – состояние • Команды изменяют состояние Компьютерная графика (лекция 6)
Аппроксимация кривых и поверхностей Атрибуты вершин Обработка вершин и сборка примитивов Источники света Растеризация и обработка фрагментов Текстуры Операции над пикселями Передача данных в буфер кадра Конвейер Компьютерная графика (лекция 6)
Функции OpenGL • Описание примитивов • Описание источников света • Задание атрибутов • Визуализация • Геометрические преобразования Компьютерная графика (лекция 6)
Начальные cведения • Заголовочные файлы • #include <GL/gl.h> • #include <GL/glu.h> • #include <GL/glut.h> • Библиотеки • Перенумерованные типы • OpenGL определяет перенумерованные типы для совместимости • GLfloat, GLint, GLenum и т.д Компьютерная графика (лекция 6)
Формат команд OpenGL glVertex3fv( v ) Тип данных B – byteub – unsigned bytes – shortus – unsigned shortI – intui – unsigned intf – floatd – double Число компонент Вектор 2 – (x, y)3 – (x, y, z)4 – (x, y, z, w) «v» отсутствует для скалярных форм glVertex2f(x,y) Компьютерная графика (лекция 6)
Пример кода • Цветной треугольник glBegin(GL_TRIANGLES) glColor2f(0.0f,1.0f); glVertex2f(50, 150); glVertex2f(200, 200); glEnd(); Компьютерная графика (лекция 6)
Определение объектов сцены • Тип примитива + набор вершин + набор атрибутов = объект • Набор объектов + набор источников света + камера = сцена • Изменение положения камеры = перемещение по сцене. • Изменение положения объектов в сцене или атрибутов = анимация Компьютерная графика (лекция 6)
Геометрические примитивы GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_POLIGON GL_QUADS GL_QUAD_STRIPE GL_TRIANGLE_FAN GL_TRIANGLE_STRIP Компьютерная графика (лекция 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)
Процесс визуализации • Задать окно для рисования • Определить константные атрибуты и свойства (источники света, текстуры и т.д.) • На каждом кадре: • Очистить окно • Задать положение наблюдателя • Для каждого объекта • Определить преобразование • Передать атрибуты • Передать геометрию Компьютерная графика (лекция 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( eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz) Компьютерная графика (лекция 6)
Связь между модельным и видовыми преобразованиями • Перемещение камеры = перемещение каждого объекта по отношению к фиксированной камере. • Видовое преобразование эквивалентно нескольким модельным преобразованиям. Компьютерная графика (лекция 6)
Левая и правая системы координат • Преобразования проекции используют левую систему координат • Znear и Zfar – просто расстояния от точки зрения • Во всех остальных случаях OpenGL использует правую систему координат y y z+ левая правая x x Компьютерная графика (лекция 6) z+
Принципы освещения • Составляющие модели освещения 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) Компьютерная графика (лекция 6)