или использовать произвольные массивы вершин.
Перед рендерингом приложение должно установить семь текстурных карт: три двухмерные текстурные карты будут хранить коэффициенты Л, В и С для красного, зеленого и синего компонентов РТМ, еще три - коэффициенты 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 - будут использованы для обращения к текстуре, чтобы получить два набора коэффициентов полинома;