glBi ndAttri bLocati onARBCprogramObj. 3. "Tangent"): glBindAttribLocationARBCprogramObj. 4. "Binomial"): Если и переменная tangent, и переменная bi normal определены как массивы из трех чисел с плавающей запятой, эти атрибуты можно передавать такими функциями:

glVertexAttrib3fvARBC3. tangent): glVertexAttrib3fvARB(4. bi normal1): или использовать произвольные массивы вершин.

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

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

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 - будут использованы для обращения к текстуре, чтобы получить два набора коэффициентов полинома;

:.Q Du - косинус угла между направлением освещения и тангенциальным вектором (число с плавающей запятой);

□ Ov, - косинус угла между направлением освещения и вектором бинормали (число с плавающей запятой);

(□ LdotN - косинус угла между нормалью поверхности и направлением освещения (число с плавающей запятой).

Предполагается, что наблюдатель бесконечно удален, а источник освещения точечный и единственный.

Листинг 10.7. Вершинный шейдер для рендеринга с помощью полиномных текстур

//

// Вершинный шейдер РТМ от Брэда Риттера. Hewlett-Packard.

// и Рэнди Роста. 3D1abs.


⇐ вернуться назад | | далее ⇒