vec4 v = Vec4(l,0. 2.0, 3.0. 4.0);

float f = v[2]; // f принимает значение 3.0

В данном случае v[2] - скалярное значение с плавающей запятой 3,0, которое присваивается f.

Применение оператора индекса к матрице возвращает соответствующий столбец матрицы в виде вектора, например:

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

vec4 v;

v “ mCl]; // Помещает вектор (0.0. 3.0. 0,0, 0,0) в v

Здесь второй столбец рассматривается как т[1] и записывается в v.

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

3.7.2. Обращение к компонентам

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

vec4 v4;

v4.rgba: // то же самое. что vec4; просто синоним v4

v4.rgb: // то we самое, что vec3

v4.b; П число с плавающей запятой

v4.xy: // то же самое, что vec2

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

vec4 pos = vec4(l,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-значений (выражения, используемые только для чтения) и 1-значений (выражения, указывающие, куда записывать результат). В г-зиаче-ниях допустимы любые комбинации и повторения компонентов, но в 1-значениях компоненты повторяться не могут, например:

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.Q. 8.0): // pos = (8.0, 2.0. 3.0. 7.0)

pos.xx = vec2(3.0. 4.0): // неправильно - 'x' указан дважды

В r-значениях этот синтаксис можно использовать для любого выражения, результат которого является вектором. Например, получить вектор из двух компонентов функции поиска по текстуре можно таким образом: vec2 v = texturelDfsampler. coord)_xy; Здесь встроенная функция texturelD возвращает значение типа vec4.

3.7.3. Покомпонентные операции

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


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