mat4 m = iriat4(3.0): // инициализирует диагональные элементы значением 3.0 vec4 v:

v =m[l]; // Помещает вектор (0.0. 3.0. 0.0, 0.0) в v

Здесь второй столбец рассматривается как т[1] и записывается в v. Если применяется отрицательный индекс или больший размера объекта, его поведение становится непредсказуемым.

3.7.2. Обращение к компонентам Оператор выбора компонентов (.), обычно использующийся в структурах, здесь применяется также для обращения к компонентам вектора по именам после оператора (swizzling), например:

vec4 v4:

v4.rgba: // то же самое, что vec4: просто синоним v4 v4.rgb: // то же саиое. что vec3 v4.b; // число с плавающей запятой v4.xy: // то же самое, что vec2

v4.xgba: // некорректно - имена компонентов из разных наборов Имена компонентов можно указывать в другом порядке, чтобы переупорядочить или скопировать компоненты:

vec4 pos = vec4(1.0. 2.0. 3.0. 4.0);
vec4 swiz = pos.wzyx: // swiz - (4.0. 3.0. 2.0. 1.0)
vec4 dup = pos.xxyy: // dup = (1.0. 1.0. 2.0. 2.0)

Можно указывать до четырех имен компонентов за одно обращение; иначе невозможно будет определить тип, получаемый в результате. Правила указания имен различаются для r-значений (выражения, используемые только для чтения) и /-значений (выражения, указывающие, куда записывать результат). В г-зиаче-ниях допустимы любые комбинации и повторения компонентов, но в /-значениях компоненты повторяться не могут, например:

vec4 pos - vec4(1.0, 2.0. 3.0. 4.0): pos.xw - vec2(5.0. 6.0): // pos = (5.0. 2.0. 3.0. 6.0) pos.wx = vec2(7.0. 8.0): // pos = (8.0, 2.0. 3.0. 7.0) pos.xx = vec2(3.0. 4.0): // неправильно - 'x' указан дважды

В r-значениях этот синтаксис можно использовать для любого выражения, результат которого является вектором. Например, получить вектор из двух компонентов функции поиска по текстуре можно таким образом:

vec2 V - texturelDfsampler. coord).ху: Здесь встроенная функция texturelD возвращает значение типа vec4.

3.7. Операции

3.7.3. Покомпонентные операции Если к вектору применяется какой-либо оператор, операция выполняется так же, как если бы она выполнялась над каждым компонентом вектора в отдельности (есть нескольких важных исключений). Например,операция


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