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

标签 glsl glsles

我试图将 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 ES 中 GLSL 的转置替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56211106/

相关文章:

ios - 是否可以将 float 组传递给 iOS SceneKit 顶点着色器修改器?

opengl-es - 写入 gl_FragColor 会导致 Android 上的 INVALID_OPERATION

c++ - GLFW GLAD 纹理未绘制,黑色正方形

opengl - 为什么有多种方法可以将 VAO 传递给 GLSL 程序?

ios - 在 iOS 上使用 OpenGL ES 2.0 进行实例化绘图

opengl-es-2.0 - 非均匀缩放的法线矩阵

javascript - glDrawElements : Source and destination textures of the draw are the same

GLSL可重用/共享函数,共享常量(OpenGL ES 2.0)?

c++ - 禁止 GLSL 中的递归?

c - 在 nvidia-340-updates 中获取段错误