Введение в opengl

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

Upload: astrid

Post on 25-Jan-2016

68 views

Category:

Documents


7 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Введение в  OpenGL

Введение в OpenGL

Лекция 9Алексей Игнатенко

Page 2: Введение в  OpenGL

На лекции

Что такое OpenGLАрхитектура OpenGLРабота с библиотекойКоманды OpenGL

•Определение геометрии•Преобразование геометрии•Проекции

Page 3: Введение в  OpenGL

Фотореализм vs. Скорость

Фотореализм•трассировка лучей•излучательность

Скорость•Метод преобразований

Page 4: Введение в  OpenGL

Что такое OpenGL?

OpenGL – кросс-платформенная библиотека функций для создания интерактивных 2D и 3D приложений

Является отраслевым стандартом с 1992 года

•Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc.

Основная функция: интерактивная визуализация трехмерных моделей

Page 5: Введение в  OpenGL

Возможности

Вывод цветных изображений высокого качества, составленных из геометрических и других примитивов

Расчет освещения от нескольких источников света

Различные виды текстурирования

Удаление невидимых поверхностей

Анимация, трехмерные преобразования

Page 6: Введение в  OpenGL
Page 7: Введение в  OpenGL
Page 8: Введение в  OpenGL
Page 9: Введение в  OpenGL

Почему OpenGL?

Аналогичные библиотеки: DirectX (Direct3D), Java 3D

OpenGL•Стабильность (с 1992 г.)•Переносимость

– Независимость от оконной и операционной системы

•Легкость применения– Простой интерфейс, реализации для различных

ЯП– Низкие затраты на обучение

• Подходит для обучения студентов!

Page 10: Введение в  OpenGL

Литература

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

Есть в библиотеке!

Page 11: Введение в  OpenGL

Литература (2)Литература (2)Ю. Тихомиров. OpenGL. Программирование трехмерной графики, БХВ – Петербург, 2002

Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL, 2-е изд., Вильямс, 2001

Page 12: Введение в  OpenGL

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

Френсис Хилл. OpenGL. Программирование компьютерной графики. Для профессионалов. Питер. 2002

Page 13: Введение в  OpenGL

Организация OpenGL

Состоит из набора библиотек • пример для Win32

Прикладная программаПрикладная программа

GLUGLU

GLGL

GLUTGLUT

Win32 APIWin32 API

Буфер кадраБуфер кадра

Page 14: Введение в  OpenGL

Сопутствующие APIAGL, GLX, WGL• Связь между OpenGL и оконной системой

GLU (OpenGL Utility Library)• Часть OpenGL• NURBS, tessellators, quadric shapes, etc

GLUT (OpenGL Utility Toolkit)• Переносимый оконный API• Неофициальная часть OpenGL

Прикладная программаПрикладная программа

GLUGLU

GLGL

GLUTGLUT

Win32 APIWin32 API

Буфер кадраБуфер кадра

Page 15: Введение в  OpenGL

Что нужно для работы с OpenGLЧто нужно для работы с OpenGL

.cpp

opengl32.lib gl.h

glu32.lib glu.h

glut32.lib

glut.h

opengl32.dllglu32.dll

glut32.dll

.exeC++

Page 16: Введение в  OpenGL

Архитектура OpenGL

Клиент-сервер• Клиент - приложение

Конвейер• Данные обрабатываются последовательно, в

несколько этапов.

Набор команд• Использует аппаратуру, если возможно

Конечный автомат• Значение переменных – состояние• Команды изменяют состояние

Page 17: Введение в  OpenGL

С какими геометрическими моделями работает OpenGL?OpenGL работает с моделями, заданными в полигональном представлении

Поверхность приближается набором полигональных граней (face, polygon)

Границы граней описываются ребрами (egde)

Часть отрезка, формирующего ребро, заканчивается вершинами (vertex)

Page 18: Введение в  OpenGL

КонвейерОбработка вершин и сборка примитивовОбработка вершин и сборка примитивов

Растеризация и обработка фрагментовРастеризация и обработка фрагментов

Операции над пикселямиОперации над пикселями

Передача данных в буфер кадраПередача данных в буфер кадра

ТекстурыТекстуры

Источники светаИсточники света

Атрибуты вершинАтрибуты вершин

Вершина любого объекта в момент определения немедленно передается в конвейер, и проходит все его ступени

Page 19: Введение в  OpenGL

Терминология

Графический примитив• Точка, линия, многоугольник и т.д.

Команда OpenGL• Вызов функции библиотеки

Вершина• Определяет точку, конец отрезка или

угол многоугольника

Атрибут вершины• Цвет, нормаль, текстурные координаты и

т.д.

Page 20: Введение в  OpenGL

Терминология (2)

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

Page 21: Введение в  OpenGL

Как рисовать объекты с помощью OpenGL?

Объекты на экране рисуются путем последовательной передачи в конвейер вершин примитивов, которые составляют объект

•команды передача данных

Обработка данных на каждом этапе конвейера может быть настроена через

•команды изменения состояния

Page 22: Введение в  OpenGL

Команды OpenGL

Описание примитивов• Точки, треугольники

Описание источников света• Положение, цвет и т.д.

Задание атрибутов• Цвет, материал, текстура примитива

Геометрические преобразования• Поворот, перенос объектов, положение камеры

Визуализация• Управление отображением на экран

Page 23: Введение в  OpenGL

Формат команд OpenGL

glVertex3fv ( v )

2 – (x, y)3 – (x, y, z)4 – (x, y, z, w)

Число компонент

B – byteub – unsigned bytes – shortus – unsigned shortI – intui – unsigned intf – floatd – double

Тип данных

«v» отсутствует для скалярных форм

glVertex2f(x,y)

Вектор

Page 24: Введение в  OpenGL

Определение примитивов в OpenGL

Объект определяется с помощью набора граней, грани задаются через задание набора вершин

glVertex{234}{df}[v]()• команда определения положения вершины

Для получения примитива необходимо связать вершины между собой

Для этого используется так называемая модель Begin/End

glBegin( prim_type );glEnd();

glVertex{234}{df}[v]()

Page 25: Введение в  OpenGL

Типы примитивов OpenGL

GL_POINTS GL_LINES GL_LINE_STRIP

GL_POLIGON

GL_TRIANGLES

GL_QUADS

GL_TRIANGLE_STRIPGL_QUAD_STRIPE

Page 26: Введение в  OpenGL

Атрибуты вершин

Каждая вершина кроме положения в пространстве может иметь несколько других атрибутов

•Материал•Цвет•Нормаль•Текстурные координаты

Внимание: всегда используется ТЕКУЩИЙ набор атрибутов

•OpenGL – конечный автомат

Page 27: Введение в  OpenGL

Пример кода

Цветной треугольникglBegin(GL_TRIANGLES);

glColor2f(0.0f,1.0f);glVertex2f(150.0f, 50 .0f);glVertex2f(50.0f, 150 .0f);glVertex2f(200 .0f, 200 .0f);

glEnd();

Таким образом можно задать любой объект! Теперь задача в том, чтобы показать этот объект на экране

Демо

Page 28: Введение в  OpenGL

Процесс визуализации

Задать окно для рисованияОпределить константные атрибуты и свойства

(источники света, текстуры и т.д.)На каждом кадре:

1. Очистить буфер кадра2. Задать положение наблюдателя3. Для каждого объекта

1. Определить преобразование2. Передать атрибуты3. Передать геометрию

4. Обновить содержимое окна

Page 29: Введение в  OpenGL

Определение окна для рисования

glViewport(x, y, width, height)

Команда задает окно внутри текущего окна, в которое будет производится вывод OpenGL

Page 30: Введение в  OpenGL

Работа с буфером кадра

1) Задание цвета для заполнения буфера кадра

glClearColor(red, green, blue, alpha)

2) Заполнение экранных буферов

glClear(GL_COLOR_BUFFER_BIT);

]1,0[alphablue,green,red,

Page 31: Введение в  OpenGL

Преобразования координат в OpenGL

Каждая вершина объекта задается в локальных координатах модели

Необходимо определить•модельно-видовое преобразование •проективное преобразование

Page 32: Введение в  OpenGL

Преобразование координатПреобразование координат

0MVVe

Отсечение:

ccd

ccd

ccd

wzz

wyy

wxx

/

/

/

Viewport

Vi={Ps,RGBA,…}

]1,1[

]1,1[

]1,1[

d

d

d

z

y

x

0

0

0

0

0

w

z

y

x

V

e

e

e

e

e

w

z

y

x

V

ec PVV

c

c

c

c

c

w

z

y

x

V

ccc

ccc

ccc

wzw

wyw

wxw

Page 33: Введение в  OpenGL

Матрицы преобразованийМатрицы преобразований

void glMatrixMode(Glenum mode); mode={GL_MODELVIEW|GL_PROJECTION}

void glLoadIdentity();

EM void glMultMatrixd(GLdouble c[16]);

]15[]11[]7[]3[

]14[]10[]6[]2[

]13[]9[]5[]1[

]12[]8[]4[]0[

cccc

cccc

cccc

cccc

MM

Выбираем матрицу преобразований для изменения:

Две основные операции над матрицами:

Page 34: Введение в  OpenGL

Матрицы преобразований (2)Матрицы преобразований (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);

Page 35: Введение в  OpenGL

Стек матриц Стек матриц

glLoadIdentity();glTranslated(…);

glPushMatrix();glRotated(…);glPopMatrix();

glPushMatrix();glRotataed(…);glPopMatrix();

E

T

TT*R1

TT*R2

T

Page 36: Введение в  OpenGL

Модельно-видовое преобразование

OpenGL не имеет раздельных матриц для видового и модельного преобразования

Поэтому нужно задавать сразу произведение:

mdlview MMM

Page 37: Введение в  OpenGL

Модельное преобразование

Обычно перенос, поворот, масштабирование модели

glTranslate, glRotate, glScale

Page 38: Введение в  OpenGL

Видовое преобразование Видовое преобразование

gluLookAt( eyex, eyey, eyez, aimx, aimy, aimz,

upx, upy, upz)

Настройка виртуальной камеры

eye – координаты наблюдателя

aim – координаты “цели”

up – направление вверх

Page 39: Введение в  OpenGL

Модельно-видовое преобразование (2)

glMatrixMode(GL_MODELVIEW);

gluLookAt(..);

glTranslate(…);glRotate(…);glTranslate(…);

glBegin(…);…glEnd();

Виртуальная камера

Модельное преобразование

Геометрия

Внимание! При определении геометрии к ней применяется текущий набор матриц преобразования!

Демо

Page 40: Введение в  OpenGL

Проективное преобразование

glMatrixModel(GL_PROJECTION);

gluPerspective(…)

Page 41: Введение в  OpenGL

Как работает gluPerspectiveКак работает gluPerspective

X

Y

Z

0

O1

O2

A1B1

C1 D1

A2

B2

C2D2

void gluPerspective(GLdouble fov, GLdouble aspect, GLdouble znear, GLdouble zfar);

fov = D1OA1 (в градусах)aspect = C1D1/D1A1

znear = |OO1|zfar = |OO2|

Page 42: Введение в  OpenGL

Итоги

OpenGL•Кросс-платформенная библиотека функций

для создания интерактивных 2D и 3D приложений

Архитектура•Клиент-сервер, конвейер, конечный автомат

Определение геометрии•glVertex, glBegin, glEnd

Преобразования геометрии•glMatrixMode, glTranslate, glRotate, glScale,

gluPerspective, … , glViewport