texture2D().r 和 texture2D().a 是什么意思?

Shu*_*un6 5 shader android opengl-es glsl

OpenGL ES在 Android 编程中使用,当我在着色器中将 YUV(NV21) 转换为 RGB 时,例如:

vec3 yuv = vec3(
        (texture2D(u_TextureY, vTextureCoord).r - 0.0625),
        texture2D(u_TextureUV, vTextureCoord).a - 0.5,
        texture2D(u_TextureUV, vTextureCoord).r - 0.5
    );
Run Code Online (Sandbox Code Playgroud)

然后我会得到与u_TextureY和分开的 YUV 数据u_TextureUV

我知道 NV21 格式是这样的:YYYYYY...UVUV...但是我如何将 YUYV422 转换为 RGB?所以,我的问题是“r”和“a”在texture2D(u_TextureY, vTextureCoord).r和 .a 中是什么意思?然后我可以找到做 YUYV422->RGB 的方法。

Rab*_*d76 5

的返回类型texture2Dvec4。在 GLSL 中,可以单独访问向量的分量:

请参阅OpenGL 着色语言规范

5.5 矢量和标量分量和长度

向量或标量的分量名称由单个字母表示。为方便记号,根据位置、颜色或纹理坐标向量的常见用法,将几个字母与每个组件相关联。可以通过在变量名称后面加上句点 ( . ) 和组件名称来选择各个组件。

支持的组件名称是:

  • {x, y, z, w} 在访问表示点或法线的向量时很有用

  • {r, g, b, a} 在访问表示颜色的向量时很有用

  • {s, t, p, q} 在访问表示纹理坐标的向量时很有用

组件的顺序可以不同以混合它们,或复制:

vec4 pos = vec4(1.0, 2.0, 3.0, 4.0);
vec4 swiz= pos.wzyx; // swiz = (4.0, 3.0, 2.0, 1.0)
vec4 dup = pos.xxyy; // dup = (1.0, 1.0, 2.0, 2.0)
float f = 1.2;
vec4 dup = f.xxxx; // dup = (1.2, 1.2, 1.2, 1.2)
Run Code Online (Sandbox Code Playgroud)


这意味着,这.r给出了 的第一个分量vec4.a给出了 的第四个分量vec4


归档时间:

查看次数:

3151 次

最近记录:

5 年,2 月 前