1 / 42

Введение в OpenGL

Введение в OpenGL. Лекция 9 Алексей Игнатенко. На лекции. Что такое OpenGL Архитектура OpenGL Работа с библиотекой Команды OpenGL Определение геометрии Преобразование геометрии Проекции. Фотореализм vs. Скорость. Фотореализм трассировка лучей излучательность. Скорость

astrid
Download Presentation

Введение в OpenGL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Введение в OpenGL Лекция 9 Алексей Игнатенко

  2. На лекции • Что такое OpenGL • Архитектура OpenGL • Работа с библиотекой • Команды OpenGL • Определение геометрии • Преобразование геометрии • Проекции

  3. Фотореализм vs. Скорость • Фотореализм • трассировка лучей • излучательность • Скорость • Метод преобразований

  4. Что такое OpenGL? • OpenGL – кросс-платформенная библиотека функций для создания интерактивных 2D и 3D приложений • Является отраслевым стандартом с 1992 года • Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc. • Основная функция: интерактивная визуализация трехмерных моделей

  5. Возможности • Вывод цветных изображений высокого качества, составленных из геометрических и других примитивов • Расчет освещения от нескольких источников света • Различные виды текстурирования • Удаление невидимых поверхностей • Анимация, трехмерные преобразования

  6. Почему OpenGL? • Аналогичные библиотеки:DirectX (Direct3D), Java 3D • OpenGL • Стабильность (с 1992 г.) • Переносимость • Независимость от оконной и операционной системы • Легкость применения • Простой интерфейс, реализации для различных ЯП • Низкие затраты на обучение • Подходит для обучения студентов!

  7. Литература • Ю.М. Баяковский, А.В. Игнатенко, А.И. Фролов. Графическая библиотека OpenGL. • Есть в библиотеке!

  8. Литература (2) Ю. Тихомиров. OpenGL. Программирование трехмерной графики, БХВ – Петербург, 2002 Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL, 2-е изд., Вильямс, 2001

  9. Литература (3) Ву Мейсон, Нейдер Джеки, Девис Том, Шрайнер Дейв. OpenGL. Руководство по программиста. Диа-Софт, 2002. Френсис Хилл. OpenGL. Программирование компьютерной графики. Для профессионалов. Питер. 2002

  10. Организация OpenGL • Состоит из набора библиотек • пример для Win32 GLU Буфер кадра Прикладная программа GL Win32 API GLUT

  11. Сопутствующие API • AGL, GLX, WGL • Связь между OpenGL и оконной системой • GLU (OpenGL Utility Library) • Часть OpenGL • NURBS, tessellators, quadric shapes, etc • GLUT (OpenGL Utility Toolkit) • Переносимый оконный API • Неофициальная часть OpenGL GLU Буфер кадра Прикладная программа GL Win32 API GLUT

  12. Что нужно для работы с OpenGL gl.h opengl32.lib opengl32.dll glu.h glu32.lib glu32.dll .exe C++ .cpp glut.h glut32.dll glut32.lib

  13. Архитектура OpenGL • Клиент-сервер • Клиент - приложение • Конвейер • Данные обрабатываются последовательно, в несколько этапов. • Набор команд • Использует аппаратуру, если возможно • Конечный автомат • Значение переменных – состояние • Команды изменяют состояние

  14. С какими геометрическими моделями работает OpenGL? • OpenGL работает с моделями, заданными в полигональном представлении Поверхность приближается набором полигональных граней (face, polygon) Границы граней описываются ребрами (egde) Часть отрезка, формирующего ребро, заканчивается вершинами (vertex)

  15. Атрибуты вершин Источники света Текстуры Растеризация и обработка фрагментов Операции над пикселями Передача данных в буфер кадра Конвейер Обработка вершин и сборка примитивов Вершина любого объекта в момент определения немедленно передается в конвейер, и проходит все его ступени

  16. Терминология • Графический примитив • Точка, линия, многоугольник и т.д. • Команда OpenGL • Вызов функции библиотеки • Вершина • Определяет точку, конец отрезка или угол многоугольника • Атрибут вершины • Цвет, нормаль, текстурные координаты и т.д.

  17. Терминология (2) • Тип примитива + набор вершин + набор атрибутов = объект • Набор объектов + набор источников света + камера = сцена • Изменение положения камеры = перемещение по сцене. • Изменение положения объектов в сцене или атрибутов = анимация

  18. Как рисовать объекты с помощью OpenGL? • Объекты на экране рисуются путем последовательной передачи в конвейер вершин примитивов, которые составляют объект • команды передача данных • Обработка данных на каждом этапе конвейера может быть настроена через • команды изменения состояния

  19. Команды OpenGL • Описание примитивов • Точки, треугольники • Описание источников света • Положение, цвет и т.д. • Задание атрибутов • Цвет, материал, текстура примитива • Геометрические преобразования • Поворот, перенос объектов, положение камеры • Визуализация • Управление отображением на экран

  20. Тип данных B – byteub – unsigned bytes – shortus – unsigned shortI – intui – unsigned intf – floatd – double Число компонент Вектор «v» отсутствует для скалярных форм glVertex2f(x,y) 2 – (x, y)3 – (x, y, z)4 – (x, y, z, w) Формат команд OpenGL glVertex3fv( v )

  21. Определение примитивов в OpenGL • Объект определяется с помощью набора граней, грани задаются через задание набора вершин • glVertex{234}{df}[v]() • команда определения положения вершины • Для получения примитива необходимо связать вершины между собой • Для этого используется так называемая модель Begin/End glBegin( prim_type ); glEnd(); glVertex{234}{df}[v]()

  22. GL_POINTS GL_LINES GL_LINE_STRIP GL_TRIANGLES GL_TRIANGLE_STRIP GL_QUAD_STRIPE GL_POLIGON GL_QUADS Типы примитивов OpenGL

  23. Атрибуты вершин • Каждая вершина кроме положения в пространстве может иметь несколько других атрибутов • Материал • Цвет • Нормаль • Текстурные координаты • Внимание: всегда используется ТЕКУЩИЙ набор атрибутов • OpenGL – конечный автомат

  24. Пример кода • Цветной треугольник glBegin(GL_TRIANGLES); glColor2f(0.0f,1.0f); glVertex2f(150.0f, 50 .0f); glVertex2f(50.0f, 150 .0f); glVertex2f(200 .0f, 200 .0f); glEnd(); • Таким образом можно задать любой объект! Теперь задача в том, чтобы показать этот объект на экране Демо

  25. Процесс визуализации • Задать окно для рисования • Определить константные атрибуты и свойства (источники света, текстуры и т.д.) • На каждом кадре: • Очистить буфер кадра • Задать положение наблюдателя • Для каждого объекта • Определить преобразование • Передать атрибуты • Передать геометрию • Обновить содержимое окна

  26. Определение окна для рисования • glViewport(x,y, width, height) • Команда задает окно внутри текущего окна, в которое будет производится вывод OpenGL

  27. Работа с буфером кадра • 1) Задание цвета для заполнения буфера кадра • glClearColor(red, green, blue, alpha) • 2) Заполнение экранных буферов • glClear(GL_COLOR_BUFFER_BIT);

  28. Преобразования координат в OpenGL • Каждая вершина объекта задается в локальных координатах модели • Необходимо определить • модельно-видовое преобразование • проективное преобразование

  29. Преобразование координат Viewport Отсечение: Vi={Ps,RGBA,…}

  30. Матрицы преобразований • Выбираем матрицу преобразований для изменения: void glMatrixMode(Glenum mode); mode={GL_MODELVIEW|GL_PROJECTION} • Две основные операции над матрицами: void glLoadIdentity(); void glMultMatrixd(GLdouble c[16]);

  31. Матрицы преобразований (2) void glTranslated(GLdouble x, GLdouble y, GLdouble z); void glScaled(GLdouble x, GLdouble y, GLdouble z); void glRotated(GLdouble angle, GLdouble ax, GLdouble ay, GLdouble az); void gluPerspective(GLdouble fov, GLdouble aspect, GLdouble znear, GLdouble zfar);

  32. Стек матриц E glLoadIdentity(); glTranslated(…); glPushMatrix(); glRotated(…); glPopMatrix(); glPushMatrix(); glRotataed(…); glPopMatrix(); T T T*R1 T T T*R2

  33. Модельно-видовое преобразование • OpenGL не имеет раздельных матриц для видового и модельного преобразования • Поэтому нужно задавать сразу произведение:

  34. Модельное преобразование • Обычно перенос, поворот, масштабирование модели • glTranslate, glRotate, glScale

  35. Видовое преобразование • Настройка виртуальной камеры gluLookAt( eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz) • eye – координаты наблюдателя • aim – координаты “цели” • up – направление вверх

  36. Модельно-видовое преобразование (2) • glMatrixMode(GL_MODELVIEW); • gluLookAt(..); • glTranslate(…); • glRotate(…); • glTranslate(…); • glBegin(…); • … • glEnd(); Внимание! При определении геометрии к ней применяется текущий набор матриц преобразования! Виртуальная камера Модельное преобразование Демо Геометрия

  37. Проективное преобразование • glMatrixModel(GL_PROJECTION); • gluPerspective(…)

  38. Как работает gluPerspective void gluPerspective(GLdouble fov, GLdouble aspect, GLdouble znear, GLdouble zfar); D2 C2 Y O2 C1 D1 B2 O1 A2 B1 A1 0 fov = D1OA1 (в градусах) aspect = C1D1/D1A1 znear = |OO1| zfar = |OO2| Z X

  39. Итоги • OpenGL • Кросс-платформенная библиотека функций для создания интерактивных 2D и 3D приложений • Архитектура • Клиент-сервер, конвейер, конечный автомат • Определение геометрии • glVertex, glBegin, glEnd • Преобразования геометрии • glMatrixMode, glTranslate, glRotate, glScale, gluPerspective, … , glViewport

More Related