// Вычисление полинома для красного цеета ptvec.г = ABCcoef[0] * Du * Du +
ABCcoef[1] * Dv * Dv +
ABCcoef[2] * Du * Ov +
DEFcoef[0] * Du +
DEFcoef[l] * Dv +
DEFcoef[2]:
// Чтение коэффициентов для зеленого цвета //и применение коэффициентов' масштабирования и сдвига Листинг 10.8 {продолжение)
ABCcoef =• (texture2D(ABCgrn. TexCoord),rgb - ABCtms) * ABCscale:
DEFcoef = (texture2D(DEFgrn, TexCoord).rgb - DEFbias) * DEFscale:
// Вычисление полинома для зеленого цвета ptvec.g = ABCcoef[0] * Du * Du +
ABCcoef[l] * Dv * Dv +
ABCcoef[2] * Du * Dv +
DEFcoef[0] * Du +
DEFcoef[l] * Dv +
DEFcoef[2]:
// Чтение коэффициентов для синего цвета
// и применение коэффициентов масштабирования и сдвига
ABCcoef = (texture2DСАВСЫu. TexCoord).rgb - ABCbias) * ABCscale;
DEFcoef = Ctexture2D(DEFblu. TexCoord).rgb - DEFbias) * DEFscale:
// Вычисление полинома для синего цвета ptvec.b = ABCcoef[0] * Du * Du +
ABCcoef[1] * Dv * Dv +
ABCcoef[2] * Du * Dv +
DEFcoefCO] * Du +
DEFcoef[1] * Dv +
DEFcoef[2];
// Умножение результата на коэффициент освещения ptvec *- texturelD(Lighttexture. LdotN).rgb;
// Занесение результата в переменную gl_FragColor gl_FragColor = vec4 (ptvec. 1.0):
}
Этот шейдер относительно прост для читателя, усвоившего предыдущие три раздела. Значения компонентов s и t переменной TexCoord являются двухмерными параметризациями вектора приращения. Эти значения используются для поиска по текстуре с коэффициентами и получения коэффициентов Л, В, С, D, Е и F. BRDF РТМ сохраняется как многоуровневая текстура, и, так как смещение по многоуровневой текстуре не задано, просто используется вычисленный уровень детализации. С помощью векторных операций шесть коэффициентов масштабируются и сдвигаются по значениям, заданным приложениям в виде uniform-переменных.
Такие преобразованные коэффициенты, как и Du и Dv, подставляются в биквадратный полином, чтобы вычислить красную составляющую поверхности. Этот процесс повторяется для зеленой и красной составляющих. Коэффициент освещения вычисляется обращением к ID-текстуре освещения по косинусу угла между направлением освещения и нормалью поверхности. Этот коэффициент освещения умножается на полиномиальный вектор, затем добавляется значение прозрачности 1,0, в результате чего получается окончательный цвет фрагмента.
Цветной рис. 11 демонстрирует, как BRDF РТМ-шейдеры выполнили рендеринг тора, используя текстуру для автомобильного покрытия под названием Mystique Lacquer. Основной цвет этой краски - черный, но зеркальное отражение в основном белого и красно-коричневого цветов с освещенной стороны и синеватого цвета - с противоположной. При вращении объекта или источника освещения приведенные шейдеры будут правильно вычислять сдвиг цветов.