Тип семплера показывает тип соответствующей текстуры. Переменная типа sampl erlD используется для доступа к ID-текстуре, переменная типа sampl er2D - для доступа к 2Б-текстуре, переменная типа sampl er3D - для доступа к ЗО-тексту-ре, переменная типа sampl erCube - для доступа к кубической текстуре, а переменные типов samplerShadowlD и samplerShadow2D - для доступа к ID- и 20-текстурам глубины. Например, если приложение предполагает использовать текстурный модуль 4, чтобы хранить 2Б-текстуру, шейдер.должен объявить uniform-переменную типа sampl er2Q, а приложение должно установить значение 4 в эту переменную перед выполнением шейдера.

Встроенные функции texturelD, texture2D, texture3D, textureCube, shadowlD и др. обращаются к текстуре из шейдера. Первый аргумент в каждой из этих встроенных функций - семплер, и тип семплера должен совпадать с именем функции. Например, семплер,типа sampl erID должен быть первым аргументом функции texturelD, семплер типа.sampler2D - первым аргументом функции texture2D и т. д. Несовпадения приведут к ошибкам компилятора.

Каждая из этих встроенных функций доступа к текстурам также получает в качестве аргумента текстурные координаты, которые затем используются аппаратным обеспечением для того, чтобы определить, к какой части текстурной карты происходит обращение. Аргумент для 20-текстуры будет типа vec2, для ЗБ-текстуры - типа vec3. Существуют также проекционные версии функций доступа к текстурам. В этих функциях компоненты текстурных координат делятся на последний компонент, а результат используется при обращении к текстуре.

Существуют различия между доступом к текстуре из вершинного и из фраг-.-ментного шейдеров (язык шейдеров OpenGL позволяет делать и то другое). Уровень детализации при доступе к множественной текстуре вычисляется стандартной функциональностью между вершинным и фрагментным процессорами. Поэтому это значение известно фрагментному процессору, но неизвестно вершинному. По этой причине в языке шейдеров OpenGL определены специальные встроен-ныефункции, которые можно вызывать только из вершинного шейдера. Эти функции позволяют получить уровень детализации текстуры и подставить его в качестве аргумента. Язык шейдеров OpenGL содержит также встроенные функции, предназначенные только для фрагментного шейдера, которые принимают значение сдвига ■уровня детализации текстуры, и это значение добавляется к автоматически вычи-.сляемому уровню детализации. Таким образом, автор шейдера может сделать изображение более резким или размытым. Если эти функции применяются к текстуре, не являющейся множественной, значение уровня детализации игнорируется.

Встроенные функции доступа к кубическим текстурам (textureCube и texture-CubeLod) работают так, как это определено для стандартной функциональности. Переданные текстурные координаты интерпретируются как вектор направления, выходящий из центра куба. Это значение используется для выбора одной из двухмерных текстур куба на основе координат с наибольшим модулем. Другие две координаты делятся на абсолютное значение этой координаты, затем масштабируются и смещаются для вычисления двухмерной координаты, которая и будет использоваться для применения кубической текстуры к выбранной грани.


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