OpenGL ES 仿抖音四屏镜像乱画

时间:2021-7-21 作者:qvyue

最近抖音上有个四分镜像的特效挺有意思,通过四分镜像一通乱画,能画出相当于窗花的效果。实现原理看着也比较简单,就随手实践下。

OpenGL ES 仿抖音四屏镜像乱画
抖音四屏镜像

摄像头的预览及四分屏效果参见OpenGL ES入门4-预览摄像头并叠加三角形
。其实原理很简单,只要对片元着色器进行处理就可以。

片元着色器代码如下:

#extension GL_OES_EGL_image_external : require
precision mediump float;
uniform samplerExternalOES videoTex;
varying vec2 textureCoordinate;

void main() {
    vec2 uv = textureCoordinate;
    if(uv.x =0.5 && uv.y =0.5){
        uv.x = uv.x * 2.0;
        uv.y = 1.0 -(uv.y - 0.5) * 2.0;
    }else if(uv.x >= 0.5 && uv.y >= 0.5){
        uv.x = 1.0 -(uv.x - 0.5) * 2.0;
        uv.y = 1.0 -(uv.y - 0.5) * 2.0;
    }

    vec4 tc = texture2D(videoTex, fract(uv));
    float color = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;
    gl_FragColor = vec4(tc.r,tc.g,tc.b,1.0);
}

因为要进行四分屏,所以原来顶点坐标对应的纹理坐标x,y要进行转换。如uv.x >= 0.5(即x坐标取值0.5~1),除了要将坐标取值范围放大到0~1,还要进行镜像处理,通过如下:

1.0 -(放大后的坐标值)

来取x轴的镜像坐标。其他情况的处理类似。

实际效果

OpenGL ES 仿抖音四屏镜像乱画
四分镜像乱画.jpg
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。