思路
1、贴纸肯定也是需要定位到人脸的
2、找到贴纸需要放置的位置
3、将贴纸纹理和人本身纹理进行融合
实现
人脸定位啥的,我就不说了,不清楚的可以去前面的文章看看,主要来看看贴纸是如何贴上去的
2. 画贴纸
在画贴纸之前,是已经将之前摄像头那些纹理已经画上去过了,然后再来画贴纸。
因为在OpenGL中如果不开启混合模式,就会把之前的纹理覆盖掉,这里就不会显示上一个纹理了。
什么是混合?混合就是把某一个像素点的位置原来的颜色与将要画上去的颜色,以某种方式混合在一起,从而达到某种特殊的效果。我们这里就需要将贴纸的纹理和人脸的纹理进行一个混合。
glBlendFunc的参数设置有多种模式,第一个参数表示的是源图因子,也就是我们要画上去的贴纸,第二个参数是目标因子,也就是我们要把贴纸画到哪儿去。这两个参数有多种值:
这个源图因子使用的是完全使用,也就是贴纸是完全展示出来的,目标因子是用1.0 - 贴纸的alpha值来作为因子的。
下面就是计算出贴纸所要显示的位置,然后将坐标信息传递给着色器
很多都在代码里进行了注释,应该都可以看得懂,下面就看一下效果图吧~~
就差不多是这样的效果,是因为我手机问题所有才模糊不清楚的,前置摄像头完成没有问题的。