Android OpenGLES滤镜开发之贴纸效果

思路

1、贴纸肯定也是需要定位到人脸的

2、找到贴纸需要放置的位置

3、将贴纸纹理和人本身纹理进行融合

实现

人脸定位啥的,我就不说了,不清楚的可以去前面的文章看看,主要来看看贴纸是如何贴上去的

1. 创建贴纸的纹理


2. 画贴纸

在画贴纸之前,是已经将之前摄像头那些纹理已经画上去过了,然后再来画贴纸。


因为在OpenGL中如果不开启混合模式,就会把之前的纹理覆盖掉,这里就不会显示上一个纹理了。

什么是混合?混合就是把某一个像素点的位置原来的颜色与将要画上去的颜色,以某种方式混合在一起,从而达到某种特殊的效果。我们这里就需要将贴纸的纹理和人脸的纹理进行一个混合。

glBlendFunc的参数设置有多种模式,第一个参数表示的是源图因子,也就是我们要画上去的贴纸,第二个参数是目标因子,也就是我们要把贴纸画到哪儿去。这两个参数有多种值:


这个源图因子使用的是完全使用,也就是贴纸是完全展示出来的,目标因子是用1.0 - 贴纸的alpha值来作为因子的。

下面就是计算出贴纸所要显示的位置,然后将坐标信息传递给着色器


很多都在代码里进行了注释,应该都可以看得懂,下面就看一下效果图吧~~


效果图

就差不多是这样的效果,是因为我手机问题所有才模糊不清楚的,前置摄像头完成没有问题的。

你可能感兴趣的:(Android OpenGLES滤镜开发之贴纸效果)