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 的方法。
的返回类型texture2D是vec4。在 GLSL 中,可以单独访问向量的分量:
请参阅OpenGL 着色语言规范:
5.5 矢量和标量分量和长度
向量或标量的分量名称由单个字母表示。为方便记号,根据位置、颜色或纹理坐标向量的常见用法,将几个字母与每个组件相关联。可以通过在变量名称后面加上句点 ( . ) 和组件名称来选择各个组件。
支持的组件名称是:
{x, y, z, w}在访问表示点或法线的向量时很有用
{r, g, b, a}在访问表示颜色的向量时很有用
{s, t, p, q}在访问表示纹理坐标的向量时很有用
组件的顺序可以不同以混合它们,或复制:
Run Code Online (Sandbox Code Playgroud)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并.a给出了 的第四个分量vec4。
| 归档时间: |
|
| 查看次数: |
3151 次 |
| 最近记录: |