vec3 V. и; float f: v = u + f : будет эквивалентна операции
v,x = u.x + f: v.y - u.y + f: v.z = u.z + f:
A операция
vec3 v. u, w; W - v + u:
будет эквивалентна операции
w.x = V.x + U.x; w.y = v.y + u.y; W.z - v.z + u.z;
Если над вектором и скалярным числом производится бинарная операция, число используется для каждого компонента вектора. Если операция выполняется, над двумя векторами, их размеры должны совпадать. Исключение - умножение вектора на матрицу или матрицы на вектор, где выполняется математическое, а не покомпонентное умножение.
Операторы приращения, уменьшения и унарного отрицания в языке тендеров OpenGL такие же, как в С. Примененные к вектору или матрице, они выполняются над каждым компонентом по отдельности. Эти операторы выполняются над целыми или числами с плавающей запятой.
Арифметические операторы сложения (+), вычитания (-), умножения (*) и деления (/) здесь такие же, как в С, или покомпонентные, за исключением случаев математического умножения векторов и матриц:
vec4 v. u: mat4 m;
v * u: // Покомпонентное умножение
v * m; // Математическое умножение строки-вектора на матрицу
m * v; // Математическое умножение матрицы на столбец-вектор
m * m; // Математическое умножение матрицы на матрицу
Все остальные операции выполняются покомпонентно.
Логическое «НЕТ» (!), логическое «И» (&&), логическое «ИЛИ» (| |) и логическое «исключающее ИЛИ» (лл) применяются только для операндов логического типа, результат их выполнения - тоже логического типа. Эти операции не могут выполняться над векторами. Существует встроенная функция not для выполнения операции покомпонентного логического «НЕТ» над векторами из булевых значений.
Операции отношений (<, >, <- и >=) выполняются только над целыми числами и числами с плавающей запятой, результатом их выполнения являются значения
4 Зак. 218
Определение языка
логического типа. Существуют встроенные функции, например lessThanEqual, которые возвращают вектор логических значений как результат покомпонентного сравнения двух векторов.