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