Подтвердить что ты не робот

Как векторы размножаются в шейдерном языке?

Например, gl_FragColor = v1 * v2, я не могу получить, как он умножается, и кажется, что ссылка дает объяснение векторной матрицы умножения. ps: Тип v1 и v2 равны vec4.

4b9b3361

Ответ 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 Операции с векторными и матричными:

За некоторыми исключениями операции являются компонентными. Обычно, когда оператор работает на векторе или матрице, он работает независимо на каждом компоненте вектора или матрицы, по компонентам мода. [...] Исключение составляют матрица, умноженная на вектор, вектор умноженное на матрицу, и матрицу, умноженную на матрицу. Это не работать с компонентами, а скорее выполнять правильные линейные алгебраическое умножение.