我在用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(使用前将#替换为@)