Ответ 1
Оператор *
работает компонентно для векторов типа vec4
.
vec4 a = vec4(1.0, 2.0, 3.0, 4.0);
vec4 b = vec4(0.1, 0.2, 0.3, 0.4);
vec4 c = a * b; // vec4(0.1, 0.4, 0.9, 1.6)
Спецификация языка GLSL говорится в разделе 5.10 Операции с векторными и матричными:
За некоторыми исключениями операции являются компонентными. Обычно, когда оператор работает на векторе или матрице, он работает независимо на каждом компоненте вектора или матрицы, по компонентам мода. [...] Исключение составляют матрица, умноженная на вектор, вектор умноженное на матрицу, и матрицу, умноженную на матрицу. Это не работать с компонентами, а скорее выполнять правильные линейные алгебраическое умножение.