BRDF РТМ может быть создана как методом LRGB, так и методом RGB. Пример, приведенный далее, демонстрирует рендеринг с использованием RGB BRDF РТМ. В примере использованы 8-битные текстуры RGBA, так как формат файла РТМ, разработанный компанией HP, основан именно на таком формате текстуры.
10.5.1. Подготовка приложения Чтобы выполнить рендеринг BRDF-поверхяосгей с использованием приведенных впримере шейдеров, приложение должно установить значения нескольких uniform-переменных. Вершинному шейдеру нужно передать значения, описывающие направление обзора (бесконечно удаленный зритель) и координаты простого источника освещения (точечный источник освещения). Фрагментному шейдеру требуются значения для масштабирования и смещения шести полиномных коэффициентов. (Эти значения уже были предварительно масштабированы при создании РТМ для сохранения точности, а теперь нужно их масштабировать снова с помощью коэффициентов масштабирования и смещения для данного РТМ.)
Приложение должно передать для каждой вершины четыре атрибута. Два из них - стандартные атрибуты OpenGL: gl^Vertex (координаты) и glJJormal (нормаль). Другие два - тангенциальный вектор и вектор бинормали, которые должны быть вычислены приложением. Нужно передавать их в OpenGL либо с помощью
8 Зак. 218
Шейдеры с сохранением данных в текстурах
функции gl VertexAttribARB, либо через произвольный массив вершин. Адрес этих произвольных атрибутов можно присоединить к нужным атрибутам в вершинном шейдере с помощью функции gl Bi ndAttri bLocati onARB. Например, если выбрать для значения тангенса адрес атрибута3, а для значений бинормали - адрес атрибута4, то присоединение будет происходить таким способом:
glBindAttribLocationARBCprogramOpj. 3. "Tangent"): glBindAttribLocationARBCprogramObj. 4. "Binomial"):
Если и переменная tangent, и переменная bi normal определены как массивы из трех чисел с плавающей запятой, эти атрибуты можно передавать такими функциями:
glVertexAttri b3fvARB(3, tangent): glVertexAttrib3fvARB(4. binomial):