GLSL транспонировать альтернативу в GLSL ES? - PullRequest
2 голосов
/ 19 мая 2019

Я пытался преобразовать GLSL в GLSL ES и получил эту проблему: функция транспонирования недоступна в GLSL ES.

mat3 yuv = transpose(yuv_matrix);

Так как я могу ее использовать?Есть ли альтернатива?

1 Ответ

1 голос
/ 19 мая 2019

Матрица 3x3 может быть транспонирована следующим образом:

mat3 yuv = mat3(
    vec3(yuv_matrix[0].x, yuv_matrix[1].x, yuv_matrix[2].x),
    vec3(yuv_matrix[0].y, yuv_matrix[1].y, yuv_matrix[2].y),
    vec3(yuv_matrix[0].z, yuv_matrix[1].z, yuv_matrix[2].z));

Обратите внимание, что транспонированная матрица - это матрица, перевернутая по диагонали.

(a  b  c) T    (a  d  g)
(d  e  f)    = (b  e  h)
(g  h  i)      (c  f  i)

Матрицы состоят из векторов столбцов. Таким образом, матрица может быть инициализирована векторами, например:

vec3 a, b, c;
mat3 m = mat3(a, b, c); 

И к векторам матрицы можно получить доступ с помощью оператора индекса, например ::

mat3 m;
vec3 v = m[1];
...