GLSL在GLSL ES中的转置替代方案?

GLSL's transpose alternative in GLSL ES?

我试图将 GLSL 转换为 GLSL ES,但遇到了这个问题:转置函数在 GLSL ES 中不可用。

mat3 yuv = transpose(yuv_matrix);

那么我该如何使用它呢?还有其他选择吗?

一个3x3的矩阵可以transposed如下:

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];