Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемЗахар Строкин
1 OpenGL Лекция 3
2 Построение тени Проективные тени Объемные тени Карты теней Мягкие тени
3 Проективные тени Отобразить сцену обычным способом Установить модельную матрицу в единичную, затем вызвать glScalef(1.0f, 0.0f, 1.0f) Выполнить необходимые преобразования для установки положения и ориентации затеняющего объекта Установить состояние, необходимое для правильного вывода цвета тени Отобразить затеняющий объект
4 Недостатки проективной тени Сложность отобразить тень не на плоском объекте Тень не отсекается по границе объекта Сложность управлением цветом тени
5 Объемные тени
6 Включить на запись буфер цвета и глубины, разрешить тест глубины. Установить аттрибуты для рисования затенненных участков. Выключить источник освещения Отобразить сцену Вычислить полигональную оболочку объемной тени Отключить запись цвета и глубины, тест глубины оставить
7 Объемные тени Установить буфер маски в 0, если наблюдатель вне тени, в 1, если он внутри Установить функцию маски в ALWAYS_PASS Установить операцию маски в увеличение, если проходит тест глубины Включить отсечение обратных граней Отобразить полигоны теневого объема Установить операцию маски в уменьшение, если проходит тест глубины
8 Объемные тени Включить отсечение лицевых граней Отобразить полигоны теневого объема Установить функцию маски в проверку на равенство нулю Установить операцию маски в «ничего не делать» Включить источник освещения Отобразить всю сцену
9 Буфер маски Прежде, чем происходит помещение пикселя в буфер кадра, происходит его сравнение со значением в буфере маски 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
10 Карты теней Сцена преобразуется таким образом, что наблюдатель находится в источнике освещения Рисуется вся сцена В текстуру считывается буфер глубины Текстура отображается на сцену с автоматической генерацией текстурных координат (eye) Интенсивность текселя (i) сравнивается с текстурной координатой r. Если r > i, то точка находится в тени.
11 Мягкие тени Установить источник света Нарисовать сцену Записать полученный кадр в буфер- накопитель Немного изменить положение источника света Повторить k раз
12 Отражения
13 Рисуем сцену как обычно, но без объектов - зеркал. Используя буфер маски, ограничиваем дальнейший вывод проекцией зеркала на экран. Визуализируем сцену, отраженную относительно плоскости зеркала. При этом буфер маски позволит ограничить вывод формой проекции объекта - зеркала.
14 Гладкое закрашивание ?
15 Корректный расчет нормали Вычислить все нормали к полигонам, в которые входит вершина Усреднить значение Нормализовать
16 Гладкое закрашивание
17 Панели (billboards)
18 Панели Прямоугольные грани, всегда расположенные параллельно картинной плоскости Картинная плоскость: p=eye+x*right+y*up Панель: p=pos+x*right+y*up, |x|
19 Использование панелей Дым Огонь Инверсионный след
20 Оптимизация программ
21 Высокоуровневая оптимизация Отображать геометрию сцены с низким качеством во время анимации, а в моменты остановок показывать ее с наилучшим качеством. Объекты, которые располагаются далеко от наблюдателя, могут быть представлены моделями пониженной сложности. Объекты, которые находятся полностью вне поля видимости, могут быть эффективно отсечены без передачи на конвейер OpenGL с помощью проверки попадания ограничивающих их простых объемов (сфер или кубов) в пирамиду зрения. Во время анимации можно отключить псевдотонирование, плавную заливку, текстуры
22 Низкоуровневая оптимизация Используйте связанные примитивы Используйте массивы вершин Используйте индексированные примитивы Задавайте необходимые массивы одной командой Храните данные о вершинах в памяти последовательно Используйте векторные версии glVertex, glColor, glNormal и glTexCoord Уменьшайте сложность примитивов Используйте дисплейные списки Не указывайте ненужные атрибуты вершин Минимизируйте количество лишнего кода между glBegin/glEnd
23 Низкоуровневая оптимизация Отключайте интерполяцию цветов, когда в этом нет необходимости Отключайте тест на глубину, когда в этом нет необходимости Используйте отсечение обратных граней полигонов Избегайте лишних операций с пикселями Уменьшайте размер окна или разрешение экрана Не используйте текстуры большого размера Комбинируйте небольшие текстуры в одну Очищайте все нужные буферы с помощью одной команды glClear Проверяйте ошибки GL во время написания программ Минимизируйте число изменений состояния OpenGL
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.