Для того чтобы использовать текстуру из равных прямоугольников как карту окружения, нужно вычислить пару углов, которые затем использовать для доступа к текстуре. Угол возвышенности вычисляется определением угла между направлением отражения и плоскостью XZ. Значение угла возвышенности должно оказаться в диапазоне от 180 (отражение прямо вверх) до -180° (отражение прямо вниз). Синус этого угла будет колебаться от 1,0 до -1,0, и его можно использовать, чтобы получить текстурную координату в диапазоне [0,1].

Угол азимута определяется проецированием направления отражения на плоскость XZ. Значение этого угла будет колебаться от 0 до 360°, и по этому значению можно определить вторую текстурную координату в диапазоне [0, 1].

Следующие OpenGL-шейдеры будут совместно выполнять наложение карты среды на объект. Углы возвышенности и азимута вычисляются для определения значений 5 и г, которые, в свою очередь, используются для доступа к текстуре среды. Предполагается, что у объекта есть дополнительный слой, который рассеивает часть освещения. Результат этого рассеивания сочетается с отражением окружающей среды для получения окончательного значения каждого пиксела.

10.4.1. Подготовка приложения Для использования этого шейдера приложение должно сделать не очень многое. Используется очень простая модель освещения, так что нужно передавать только координаты одного источника освещения. В данном примере карта окружения будет занесена в текстурный модуль 4. Режим наложения для текстуры устанавливается и для s, и для t (это необходимо для небольшого трюка во фрагментном шейдере). Цвет слоя, который рассеивает освещение, для данного объекта определяется в baseColor, а соотношение основного цвета к отражению среды устанавливается в mi xRati о. Вот определения необходимых uniform-переменных.

LightPos 0.0. 0.0. 4.0
BaseColor 0.4. 0.4. 1.0 MixRatio 0.8 EnvMap 4

После того как шейдеры, а также значения uniform-переменных установлены, приложение должно задать нормаль и координаты для каждой.вершины. Текущие значения матрицы модели-вида, матрицы проекции-модели-вида и матрицы нормали будут получены непосредственно из шейдера.


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