или использовать произвольные массивы вершин.

Перед рендерингом приложение должно установить семь текстурных карт: три двухмерные текстурные карты будут хранить коэффициенты Л, В и С для красного, зеленого и синего компонентов РТМ, еще три - коэффициенты D, Е и .Рдля красного, зеленого и синего компонентов РТМ, а одномерная текстура будет хранить функцию освещения.

Эта последняя текстура устанавливается приложением всякий раз, когда состояние освещения меняется. Текстура коэффициента освещения решает четыре проблемы,

1. Распознавание передней и задней поверхностей. Эта текстура индексируется LdotN, значение положительное для вершин лицевой поверхности и отрицательное для вершин обратной поверхности. На первом уровне сложности текстура коэффициента освещения может решить проблему лицевой/обратной поверхности хранением значения 1,0 для лицевой и 0,0 - для обратной поверхности.

2. Иногда желательно освещать объекты цветным светом. На втором уровне сложности текстура освещения (в которой есть три канала, R, G и В) будет хранить цвет освещения вместо значения 1,0 для лицевой поверхности,

3. Резкий переход с лицевой поверхности на обратную выглядит некрасиво и не очень реалистично. На третьем уровне сложности применяется постепенное изменение значений текстуры от 0 до 1,0. Чтобы определить нужные значения, можно использовать кривую синуса или косинуса.

4. Для рендеринга с помощью РТМ не существует понятия общего освещения. Если выполнить рендеринг обратной поверхности со значениями (0, 0, 0), она может выглядеть очень нереалистично. Вместо того чтобы использовать значения 0 для отрицательных индексов, лучше подставлять значения 0,1.

10.5.2. Вершинный шейдер

Вершинный шейдер по методу BRDF РТМ приведен в листинге 10.7. Цель этого шейдера - вычислить значения пяти varying-переменных:

□ gl_Posi ti on - требуется от каждого вершинного шейдера;

□ TexCoord - будут использованы для обращения к текстуре, чтобы получить два набора коэффициентов полинома;


⇐ Предыдущая| |Следующая ⇒