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

2024-01-08

我在用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
    );

然后我会得到与以下内容分开的 YUV 数据u_TextureY and u_TextureUV.

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


返回类型为texture2D is vec4。在 GLSL 中,向量的组成部分可以单独访问:

See the OpenGL 着色语言规范 https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf:

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)


这意味着.r给出第一个分量vec4 and .a给出第 4 个分量vec4.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

texture2D().r 和texture2D().a 是什么意思? 的相关文章

随机推荐