将Alpha蒙版应用于OpenGL中的视频

莫汉(MohanRaj Balumuri)

我想对视频应用Alpha蒙版。视频的每一帧在顶部都有颜色信息,在底部有alpha信息。像这样:

在此处输入图片说明

就我而言,我希望Alpha图像中的白色像素在主图像中透明。我还有其他纹理可以填充这些透明像素。

我只能生成彩色图像或仅生成Alpha图像,但无法将Alpha应用于图像。我在Android中使用GLES20。

这是我的代码,它显示黑屏:

private val vidVertexShaderCode =
        """
    precision highp float;
    attribute vec3 vertexPosition;
    attribute vec4 uvs;
    varying vec2 varUvs;
    varying vec2 varMaskUvs;
    uniform mat4 texMatrix;
    uniform mat4 mvp;

    void main()
    {
        varUvs = (texMatrix * vec4(uvs.x, uvs.y, 0, 1.0)).xy;
        varMaskUvs = (texMatrix * vec4(uvs.x, uvs.y * 0.5, 0.1, 1.0)).xy;
        gl_Position = mvp * vec4(vertexPosition, 1.0);
    }
    """

private val vidFragmentShaderCode =
        """
    #extension GL_OES_EGL_image_external : require
    precision mediump float;

    varying vec2 varUvs;
    varying vec2 varMaskUvs;
    uniform samplerExternalOES texSampler;

    void main()
    {
        vec2 m_uv  = vec2(varMaskUvs.x, varMaskUvs.y); 
        vec4 mask = texture2D(texSampler, m_uv);  

        vec2 c_uv  = vec2(varUvs.x, varUvs.y * 0.5); 
        vec4 color = texture2D(texSampler, c_uv);  
        gl_FragColor = vec4(color.rgb, color.a * mask.r)
    }
    """

我究竟做错了什么?

PS我是opengl的新手。

拉比德76

在顶点着色器中计算图像()和遮罩(v坐标uvs.y * 0.5 + 0.5uvs.y * 0.5

precision highp float;
attribute vec3 vertexPosition;
attribute vec4 uvs;
varying vec2 varUvs;
varying vec2 varMaskUvs;
uniform mat4 texMatrix;
uniform mat4 mvp;

void main()
{
    varUvs      = (texMatrix * vec4(uvs.x, uvs.y * 0.5 + 0.5, 0, 1.0)).xy;
    varMaskUvs  = (texMatrix * vec4(uvs.x, uvs.y * 0.5, 0.0, 1.0)).xy;
    gl_Position = mvp * vec4(vertexPosition, 1.0);
}

您无需在片段着色器中进行任何进一步的转换:

#extension GL_OES_EGL_image_external : require
precision mediump float;

varying vec2 varUvs;
varying vec2 varMaskUvs;
uniform samplerExternalOES texSampler;

void main()
{
    vec4 mask    = texture2D(texSampler, varMaskUvs);  
    vec4 color   = texture2D(texSampler, varUvs);  
    gl_FragColor = vec4(color.rgb, color.a * mask.r)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将蒙版应用到 OpenGL 中的视频

来自分类Dev

如何将Alpha蒙版应用于Android可绘制对象?

来自分类Dev

将响应式SVG图像蒙版应用于HTML5视频

来自分类Dev

将函数应用于蒙版的numpy数组

来自分类Dev

调用熊猫将函数应用于蒙版的结果

来自分类Dev

将WHERE中的蒙版应用于更高维度的数组

来自分类Dev

使用imagemagick将垫调整大小的蒙版应用于裁切大小的图像

来自分类Dev

如何将蒙版应用于保存图像 (swift3)

来自分类Dev

使用numpy将二进制蒙版应用于RGB图像时出现问题

来自分类Dev

在OpenGL中为透明图像应用蒙版

来自分类Dev

FFmpeg:将效果应用于视频

来自分类Dev

将属性应用于视频

来自分类Dev

如何在Java中将灰度图像蒙版应用于RGB图像

来自分类Dev

如何在Java中将灰度图像蒙版应用于RGB图像

来自分类Dev

将垂直Alpha渐变应用于UITableView

来自分类Dev

将CIFilter应用于视频文件并保存

来自分类Dev

无法创建将纹理应用于 OpenGL 中的一条线

来自分类Dev

在张量流中将1通道蒙版应用于3通道张量

来自分类Dev

如何在不将转换应用于其蒙版的情况下在Snap.svg中转换形状?

来自分类Dev

如何使用Python的svgwrite模块应用Alpha蒙版?

来自分类Dev

将CIFilter应用于OpenGL渲染到纹理

来自分类Dev

将CIFilter应用于OpenGL渲染到纹理

来自分类Dev

在Numpy中的阵列上应用蒙版

来自分类Dev

EaselJS或TweenMax中具有Alpha滤镜的蒙版

来自分类Dev

EaselJS Alpha蒙版滤镜

来自分类Dev

将渐变作为蒙版应用到画布中的渐变填充?

来自分类Dev

如何将遮罩滤镜应用于OpenGL ES 2中的当前帧缓冲区

来自分类Dev

将纹理应用于OpenGL中的多边形后,纹理看起来有点模糊

来自分类Dev

在Chrome中将剪辑应用于视频

Related 相关文章

  1. 1

    将蒙版应用到 OpenGL 中的视频

  2. 2

    如何将Alpha蒙版应用于Android可绘制对象?

  3. 3

    将响应式SVG图像蒙版应用于HTML5视频

  4. 4

    将函数应用于蒙版的numpy数组

  5. 5

    调用熊猫将函数应用于蒙版的结果

  6. 6

    将WHERE中的蒙版应用于更高维度的数组

  7. 7

    使用imagemagick将垫调整大小的蒙版应用于裁切大小的图像

  8. 8

    如何将蒙版应用于保存图像 (swift3)

  9. 9

    使用numpy将二进制蒙版应用于RGB图像时出现问题

  10. 10

    在OpenGL中为透明图像应用蒙版

  11. 11

    FFmpeg:将效果应用于视频

  12. 12

    将属性应用于视频

  13. 13

    如何在Java中将灰度图像蒙版应用于RGB图像

  14. 14

    如何在Java中将灰度图像蒙版应用于RGB图像

  15. 15

    将垂直Alpha渐变应用于UITableView

  16. 16

    将CIFilter应用于视频文件并保存

  17. 17

    无法创建将纹理应用于 OpenGL 中的一条线

  18. 18

    在张量流中将1通道蒙版应用于3通道张量

  19. 19

    如何在不将转换应用于其蒙版的情况下在Snap.svg中转换形状?

  20. 20

    如何使用Python的svgwrite模块应用Alpha蒙版?

  21. 21

    将CIFilter应用于OpenGL渲染到纹理

  22. 22

    将CIFilter应用于OpenGL渲染到纹理

  23. 23

    在Numpy中的阵列上应用蒙版

  24. 24

    EaselJS或TweenMax中具有Alpha滤镜的蒙版

  25. 25

    EaselJS Alpha蒙版滤镜

  26. 26

    将渐变作为蒙版应用到画布中的渐变填充?

  27. 27

    如何将遮罩滤镜应用于OpenGL ES 2中的当前帧缓冲区

  28. 28

    将纹理应用于OpenGL中的多边形后,纹理看起来有点模糊

  29. 29

    在Chrome中将剪辑应用于视频

热门标签

归档