OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.

Презентация:



Advertisements
Похожие презентации
Фильтрация текстур. Пиксельные операции. Астана 2004 Лекция 11.
Advertisements

Освещение и текстурирование в OpenGL Астана 2004 Лекция 10.
Графический конвейер Преобразования геометрии Александр Шубин.
OpenGL Лекция 2.. Преобразование координат Преобразования координат.
OpenGL Лекция 4 ( ). void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr ) size определяет число координат вершины (2, 3,
OpenGL API Алексей Игнатенко (MSU Graphics & Media Lab) Алексей Игнатенко (MSU Graphics & Media Lab)
Компьютерная графика. Лекция 4 Алгоритмы формирования изображений. Основы OpenGL.
OpenGL. Графический конвейер. Геометрические преобразования.
OpenGL Графические библиотеки 2D –GAPI –GDI –XWindow –GTK –QT 3D –DirectX –OpenGL.
РАСТРОВАЯ И ВЕКТОРНАЯ ГРАФИКА ГРАФИЧЕСКИЕ РЕДАКТОРЫ.
1. Редактором графических изображений называется программа, предназначенная для построения диаграмм. 2. В растровом графическом редакторе используется.
GPU vs. CPU 302 млн. транзисторов Тактовая частота 550Mhz 1GB 850x2 MHz памяти 380 млн. транзисторов Тактовая частота 650Mhz 1GB 775x2 MHz памяти Тактовая.
Аффинные преобразования Графический конвейер Астана. Лекция 7.
Лекция 13 Метод трассировки лучей Астана Трассировка лучей через сферическую каплю воды Луч 7 -- луч Декарта [1637]
Достоинства и недостатки рендеринга, используемого в OpenGL OpenGL изначально создавался для интерактивной визуализации трехмерных сцен Обеспечивает достаточно.
GPU vs. CPU 681 млн. транзисторов Тактовая частота 575Mhz * 768MB 1.8 Ghz памяти DDR4 ~650 млн. транзисторов Тактовая частота ~700Mhz 1GB 1.1 Ghz памяти.
Программа «Paint» Создала руководитель объединения «Мой друг – компьютер» Львова Н.В
Прямые. Кривые. Поверхности Лекция 12. Алексей Игнатенко.
Растровое изображение напоминает лист клетчатой бумаги, на котором каждая точка закрашена цветом, в совокупности формируя рисунок. Каждое растровое изображение.
Растровая и векторная графика Половинкина Надежда Владимировна Учитель информатики Тамбовская область р.п. Сосновка МОУ Сосновская СОШ 1.
Транксрипт:

OpenGL Лекция 3

Построение тени Проективные тени Объемные тени Карты теней Мягкие тени

Проективные тени Отобразить сцену обычным способом Установить модельную матрицу в единичную, затем вызвать glScalef(1.0f, 0.0f, 1.0f) Выполнить необходимые преобразования для установки положения и ориентации затеняющего объекта Установить состояние, необходимое для правильного вывода цвета тени Отобразить затеняющий объект

Недостатки проективной тени Сложность отобразить тень не на плоском объекте Тень не отсекается по границе объекта Сложность управлением цветом тени

Объемные тени

Включить на запись буфер цвета и глубины, разрешить тест глубины. Установить аттрибуты для рисования затенненных участков. Выключить источник освещения Отобразить сцену Вычислить полигональную оболочку объемной тени Отключить запись цвета и глубины, тест глубины оставить

Объемные тени Установить буфер маски в 0, если наблюдатель вне тени, в 1, если он внутри Установить функцию маски в ALWAYS_PASS Установить операцию маски в увеличение, если проходит тест глубины Включить отсечение обратных граней Отобразить полигоны теневого объема Установить операцию маски в уменьшение, если проходит тест глубины

Объемные тени Включить отсечение лицевых граней Отобразить полигоны теневого объема Установить функцию маски в проверку на равенство нулю Установить операцию маски в «ничего не делать» Включить источник освещения Отобразить всю сцену

Буфер маски Прежде, чем происходит помещение пикселя в буфер кадра, происходит его сравнение со значением в буфере маски glEnable(GL_STENCIL_TEST); void glStencilFunc( GLenum func, GLint ref, GLuint mask );funcrefmask void glStencilOp( GLenum fail, GLenum zfail, GLenum zpass );failzfailzpass GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT

Карты теней Сцена преобразуется таким образом, что наблюдатель находится в источнике освещения Рисуется вся сцена В текстуру считывается буфер глубины Текстура отображается на сцену с автоматической генерацией текстурных координат (eye) Интенсивность текселя (i) сравнивается с текстурной координатой r. Если r > i, то точка находится в тени.

Мягкие тени Установить источник света Нарисовать сцену Записать полученный кадр в буфер- накопитель Немного изменить положение источника света Повторить k раз

Отражения

Рисуем сцену как обычно, но без объектов - зеркал. Используя буфер маски, ограничиваем дальнейший вывод проекцией зеркала на экран. Визуализируем сцену, отраженную относительно плоскости зеркала. При этом буфер маски позволит ограничить вывод формой проекции объекта - зеркала.

Гладкое закрашивание ?

Корректный расчет нормали Вычислить все нормали к полигонам, в которые входит вершина Усреднить значение Нормализовать

Гладкое закрашивание

Панели (billboards)

Панели Прямоугольные грани, всегда расположенные параллельно картинной плоскости Картинная плоскость: p=eye+x*right+y*up Панель: p=pos+x*right+y*up, |x|

Использование панелей Дым Огонь Инверсионный след

Оптимизация программ

Высокоуровневая оптимизация Отображать геометрию сцены с низким качеством во время анимации, а в моменты остановок показывать ее с наилучшим качеством. Объекты, которые располагаются далеко от наблюдателя, могут быть представлены моделями пониженной сложности. Объекты, которые находятся полностью вне поля видимости, могут быть эффективно отсечены без передачи на конвейер OpenGL с помощью проверки попадания ограничивающих их простых объемов (сфер или кубов) в пирамиду зрения. Во время анимации можно отключить псевдотонирование, плавную заливку, текстуры

Низкоуровневая оптимизация Используйте связанные примитивы Используйте массивы вершин Используйте индексированные примитивы Задавайте необходимые массивы одной командой Храните данные о вершинах в памяти последовательно Используйте векторные версии glVertex, glColor, glNormal и glTexCoord Уменьшайте сложность примитивов Используйте дисплейные списки Не указывайте ненужные атрибуты вершин Минимизируйте количество лишнего кода между glBegin/glEnd

Низкоуровневая оптимизация Отключайте интерполяцию цветов, когда в этом нет необходимости Отключайте тест на глубину, когда в этом нет необходимости Используйте отсечение обратных граней полигонов Избегайте лишних операций с пикселями Уменьшайте размер окна или разрешение экрана Не используйте текстуры большого размера Комбинируйте небольшие текстуры в одну Очищайте все нужные буферы с помощью одной команды glClear Проверяйте ошибки GL во время написания программ Минимизируйте число изменений состояния OpenGL