Освещение - очень сложная тема в компьютерной графике.
Что действительно важно, так это, конечно, освещение объекта, эмуляция освещения реального мира или эффект, на который мы нацеливаемся.Среда освещения может состоять из множества источников, чтобы приблизить реальный эффект, которого мы пытаемся достичь.
Реализация освещения OpenGL - это динамические источники света, которые представляют собой абстракцию точки света, которая позволяет «освещать» (то естьдать цвет) для визуализированных вершин (которые используются для визуализации треугольников).... вершина подсвечивается, получайте цветовой вклад для каждого источника света.
Как вы упомянули, процесс рендеринга занимает больше времени, чем мы включили.Чтобы свести к минимуму это, у вас есть различные возможности.
- Отбор света (исключите источники света, которые вносят незначительный вклад в изменение цвета), и это определяется с помощью свойств света (расстояние, конус, затухание, точкапросмотр и блокирование объектов).
- Статическое освещение, в котором используются текстуры для имитации освещения объектов, которые никогда не движутся.
Фиксированное освещение OpenGL вносит вклад в цвет вершины, который интерполируется с другой вершинойцвета для растеризации треугольника.В случае, когда геометрия состоит из нескольких треугольников, вы не можете видеть ни одного светового конуса внутри каждого треугольника, потому что цвет его фрагмента является результатом интерполяции трех цветов (трех вершин).
Для достиженияДля более точного освещения программное обеспечение должно определять цвет каждого фрагмента (пикселя) (освещение пикселей) таким же образом, как вершина окрашивается светом, но, как вы понимаете, пикселей может быть больше, чем вершин.Подход состоит в том, чтобы вычислить (используя шейдеры или расширение OpenGL) вклад света для каждого пикселя геометрии во время фазы растеризации или определить цвет пикселя, используя отложенное освещение.
Отложенное освещение использует несколько текстур (соответствующихобласть просмотра) для хранения параметров источников света для каждого отображаемого пикселя.Таким образом, вы выполняете вычисление освещения после получения изображения, определяя вклад света в пиксели один раз для каждого пикселя, а не один раз для каждого геометрического пикселя.