43
Астана (22 .02. 2003) Компьютерная графика (лек ция 6) ВВЕДЕНИЕ В OPENGL Лекция 6

ВВЕДЕНИЕ В OPENGL

  • Upload
    etenia

  • View
    85

  • Download
    0

Embed Size (px)

DESCRIPTION

ВВЕДЕНИЕ В OPENGL. Лекция 6. План лекции. Что такое OpenGL Работа с библиотекой Обзор архитектуры Функции OpenGL Определение объектов Преобразование координат Освещение. Синтез изображений. for each polygon in model project polygon onto viewing plane for each pixel in polygon - PowerPoint PPT Presentation

Citation preview

Page 1: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

ВВЕДЕНИЕ В OPENGL

Лекция 6

Page 2: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

План лекции

• Что такое OpenGL

• Работа с библиотекой

• Обзор архитектуры

• Функции OpenGL– Определение объектов– Преобразование координат– Освещение

Page 3: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 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 endend

Page 4: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Что такое OpenGL?

• OpenGL - прикладной программный интерфейс (API – Application Programming Interface) для разработки приложений в области трехмерной графики.

• Был утвержден в 1992 году – Основой стандарта стала библиотека IRIS GL,

разработанная фирмой Silicon Graphics Inc.

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

Page 5: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Возможности

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

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

• Текстурирование• Удаление невидимых поверхностей• Анимация, трехмерные преобразования

Page 6: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Почему OpenGL?

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

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

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

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

Page 7: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

• Состоит из набора библиотек

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

GLUGLU

GLGL

GLUTGLUT

GLXGLX

Win32 APIWin32 API

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

Page 8: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Сопутствующие API

•AGL, GLX, WGL– Связь между OpenGL и оконной системой

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

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

Page 9: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

OpenGL и сопутствующие API

Application program

X, Win32, Mac OS GL

Software and/or hardware

GLUGLX, AGL or

WGL

GLUTOpenGL motif widget

or similar

Page 10: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

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

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

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

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

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

Page 11: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

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

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

этапов.

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

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

Page 12: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

КонвейерАппроксимация кривых и поверхностейАппроксимация кривых и поверхностей

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

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

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

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

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

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

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

Page 13: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Функции OpenGL

• Описание примитивов• Описание источников света• Задание атрибутов• Визуализация• Геометрические преобразования

Page 14: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Начальные cведения

• Заголовочные файлы– #include <GL/gl.h>– #include <GL/glu.h>– #include <GL/glut.h>

• Библиотеки

• Перенумерованные типы– OpenGL определяет перенумерованные типы

для совместимости• GLfloat, GLint, GLenum и т.д

Page 15: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Формат команд 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 16: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Пример кода

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

glColor2f(0.0f,1.0f);

glVertex2f(50, 150);

glVertex2f(200, 200);

glEnd();

Page 17: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Определение объектов сцены

• Тип примитива + набор вершин + набор атрибутов = объект

• Набор объектов + набор источников света + камера = сцена

• Изменение положения камеры = перемещение по сцене.

• Изменение положения объектов в сцене или атрибутов = анимация

Page 18: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Геометрические примитивы

GL_POINTS GL_LINES GL_LINE_STRIP

GL_LINE_LOOP

GL_POLIGONGL_TRIANGLES

GL_QUADS

GL_TRIANGLE_STRIPGL_TRIANGLE_FAN

GL_QUAD_STRIPE

Page 19: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

• Примитивы определяются, используя:

glBegin( prim_type );glEnd();

• prim_type определяет, каким образом будут комбинироваться вершины

Page 20: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Основные атрибуты

• Атрибуты вершины (vertex)– Положение в пространстве– Материал– Цвет– Нормаль

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

Page 21: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Пример кода

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

glColor2f(0.0f,1.0f);

glVertex2f(50, 150);

glVertex2f(200, 200);

glEnd();

Внимание: операторные скобки!

Page 22: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

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

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

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

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

Page 23: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

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

• Видовые преобразования– Ориентация камеры

• Проекция на плоскость камеры

• Перевод в систему координат устройства

Page 24: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

Камера

Штатив Модель

Видимый объем

Page 25: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Виртуальная камера и преобразования

• Преобразование проекции– Настройка линз камеры

• Видовое преобразование– Изменение положения камеры в пространстве

• Модельное преобразование– Изменение положения модели в пространстве

• Оконные (viewport) преобразования– Изменение размеров готовой фотографии

Page 26: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Координатные системы и преобразования

• Шаги для формирования изображения– Определение геометрии (мировая системы

координат)– Определение камеры (видовая система координат)– Проецирование (оконная система координат)– Перевод в экранные координаты (экранная

система координат)

• Каждый шаг использует преобразования• Каждая трансформация эквивалентна изменению системы координат

Page 27: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

3D преобразования

• Каждая вершина транформируется с помощью матриц 4x4– Все аффиные операции – умножения

матриц– Все матрицы хранятся построчно в

OpenGL

Page 28: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Определение преобразований в OpenGL

• Программист имеет два стиля определения преобразований– Определяя матрицы (glLoadMatrix,

glMultMatrix)– Определяя операции (glRotate, glOrtho)

• Программист не обязан помнить точные формулы для вычисления матриц

Page 29: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Конвейер

Page 30: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Пример (1)

Page 31: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Пример (2)

Page 32: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Пример (3)

Page 33: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Пример (4)

Page 34: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Применение преобразований проекции

• Типичное использованиеglMatrixMode ( GL_PROJECTION );

glLoadIdentity ();

glOrtho ( left, right, bottom, top, zNear, zFar)

Page 35: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

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

• Установка «штатива» камеры, настройка объектива

• Чтобы «летать» по сцене– Задать видовое преобразование и

перерисовать сцену

• gluLookAt( eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz)

Page 36: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Связь между модельным и видовыми преобразованиями

• Перемещение камеры = перемещение каждого объекта по отношению к фиксированной камере.

• Видовое преобразование эквивалентно нескольким модельным преобразованиям.

Page 37: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Левая и правая системы координат

• Преобразования проекции используют левую систему координат– Znear и Zfar – просто расстояния от точки зрения

• Во всех остальных случаях OpenGL использует правую систему координат

левая праваяx

y z+

x

y

z+

Page 38: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Принципы освещения

• Составляющие модели освещения OpenGL– Материал объекта определяет его

своейста его поверхности– Цвет и положение источника света– Глобальные параметры освещения

• рассеянный свет

Page 39: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Модель Фонга

• ambient = Ka,diffuse = Kd * cos(N, L),specular = Ks * (cos (R, V)) Ns

• intensity = ambient + amp * (diffuse + specular).

Page 40: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Как устроено освещение в OpenGL

• Модель Фонга– Вычисляется на вершинах

• Составляющие модели освещения– Свойства материала поверхности– Свойства источника света– Свойства модели освещения

Page 41: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Свойства материала

• Определение свойств материала для примитива glMaterialfv (face, property, value)

GL_DIFFUSE

GL_SPECULAR

GL_AMBIENT

GL_EMISSION

GL_SHININESS

Page 42: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Свойства источника света

• glLightfv ( light, property, value )

– цвет источника– положение– затухание

Page 43: ВВЕДЕНИЕ В  OPENGL

Астана (22 .02. 2003) Компьютерная графика (лекция 6)

Типы источников света

• OpenGL поддерживает два типа источников света– Локальные (точечные) источники– Бесконечно удаленные (параллельные)

источники

• Тип определяется координатой w– w = 0 параллельный источник– W 0 точечный источник (x / w, y / w, z /w)