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];
我试图将 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];