日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android OpenGLES滤镜开发之贴纸效果

發布時間:2024/3/13 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android OpenGLES滤镜开发之贴纸效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

上一篇中寫到了如何實現放大眼睛的效果,這一篇實現貼紙效果,就像那個faceu相機,b612相機,還有抖音都會有的這種貼紙效果。

思路

1、貼紙肯定也是需要定位到人臉的
2、找到貼紙需要放置的位置
3、將貼紙紋理和人本身紋理進行融合

實現

人臉定位啥的,我就不說了,不清楚的可以去前面的文章看看,主要來看看貼紙是如何貼上去的

1. 創建貼紙的紋理
//OpenGL 紋理mTextureId = new int[1];//OpenGLUtils是個OpenGL的工具類,具體的前面也有寫OpenGLUtils.glGenTextures(mTextureId);GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,mTextureId[0]);//將bitmap與紋理的id綁定起來GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0,mBitmap,0);//解綁GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,0);
2. 畫貼紙

在畫貼紙之前,是已經將之前攝像頭那些紋理已經畫上去過了,然后再來畫貼紙。

//開啟混合模式:將多張圖片進行混合(貼圖)GLES20.glEnable(GLES20.GL_BLEND);//設置貼圖模式//1.src 源圖因子 要畫的是源(耳朵)//2.dst 已經畫好的目標,也就是我們要往哪兒畫,也就是其他filter的圖像//GLES20.GL_ONE 原本是什么樣子,就畫成什么樣子//GLES20.GL_ONE_MINUS_SRC_ALPHA,表示用1.0減去源顏色alpha的值來作為因子 GLES20.glBlendFunc(GLES20.GL_ONE,GLES20.GL_ONE_MINUS_SRC_ALPHA);

因為在OpenGL中如果不開啟混合模式,就會把之前的紋理覆蓋掉,這里就不會顯示上一個紋理了。
什么是混合?混合就是把某一個像素點的位置原來的顏色與將要畫上去的顏色,以某種方式混合在一起,從而達到某種特殊的效果。我們這里就需要將貼紙的紋理和人臉的紋理進行一個混合。
glBlendFunc的參數設置有多種模式,第一個參數表示的是源圖因子,也就是我們要畫上去的貼紙,第二個參數是目標因子,也就是我們要把貼紙畫到哪兒去。這兩個參數有多種值:

GL_ZERO:表示使用0.0作為因子,實際上相當于不使用這種顏色參與混合運算。
GL_ONE: 表示使用1.0作為因子,實際上相當于完全的使用了這種顏色參與混合運算。
GL_SRC_ALPHA:表示使用源顏色的alpha值來作為因子。
GL_DST_ALPHA:表示使用目標顏色的alpha值來作為因子。
GL_ONE_MINUS_SRC_ALPHA:表示用1.0減去源顏色的alpha值來作為因子。
GL_ONE_MINUS_DST_ALPHA:表示用1.0減去目標顏色的alpha值來作為因子。

這個源圖因子使用的是完全使用,也就是貼紙是完全展示出來的,目標因子是用1.0 - 貼紙的alpha值來作為因子的。

下面就是計算出貼紙所要顯示的位置,然后將坐標信息傳遞給著色器

//畫耳朵,是需要往人臉上畫,不是全屏畫float x = mFace.landmarks[0];float y =mFace.landmarks[1];//轉換為要畫到屏幕上的寬、高x = x / mFace.imgWidth * mOutputWidth;y = y/ mFace.imgHeight * mOutputHeight;//貼紙需要顯示的位置//1.需要顯示到屏幕上的x坐標,2.y坐標//3.需要顯示的貼紙的寬 4.高,這兩個參數需要不斷的調試,然后獲得比較合適的GLES20.glViewport((int)x, (int)y-mBitmap.getHeight()/2,(int) ((float)mFace.width /mFace.imgWidth * mOutputWidth),mBitmap.getHeight());LES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER,mFrameBuffers[0]);GLES20.glUseProgram(mGLProgramId);//傳遞坐標mGLVertexBuffer.position(0);GLES20.glVertexAttribPointer(vPosition, 2, GLES20.GL_FLOAT, false, 0, mGLVertexBuffer);GLES20.glEnableVertexAttribArray(vPosition);mGLTextureBuffer.position(0);GLES20.glVertexAttribPointer(vCoord, 2, GLES20.GL_FLOAT, false, 0, mGLTextureBuffer);GLES20.glEnableVertexAttribArray(vCoord);//激活紋理,傳遞紋理給著色器GLES20.glActiveTexture(GLES20.GL_TEXTURE0);GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,mTextureId[0]);GLES20.glUniform1i(vTexture,0);//畫畫GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP,0,4);// 解綁紋理GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,0);//解綁FRAMEBUFFERGLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER,0);//最后使用完畢以后需要關閉這個融合GLES20.glDisable(GLES20.GL_BLEND);

很多都在代碼里進行了注釋,應該都可以看得懂,下面就看一下效果圖吧~~

效果圖

就差不多是這樣的效果,是因為我手機問題所有才模糊不清楚的,前置攝像頭完成沒有問題的。

總結

以上是生活随笔為你收集整理的Android OpenGLES滤镜开发之贴纸效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩在线视频免费观看 | 国产精品自拍区 | 成年免费视频 | 日韩不卡一区二区三区 | 天天操天天透 | 成人午夜av在线 | 美女视频黄的免费 | 毛片一区二区 | 亚洲视频一区在线 | xxxxwww国产| 亚洲AV成人无码久久精品巨臀 | 美国黄色一级毛片 | 天天插天天干 | 超碰人人人人人人人 | 欧美黄色大片免费观看 | 亚洲精品免费在线观看 | 国产午夜亚洲精品午夜鲁丝片 | 超碰在线| 日本少妇在线观看 | 国产精品一区在线观看你懂的 | 精品国产乱码久久久久久鸭王1 | 中文字幕人妻丝袜乱一区三区 | 免费看裸体视频网站 | 蜜臀av在线免费观看 | 69国产视频 | 超碰在线网址 | 久草网视频在线观看 | 一区二区视频在线观看 | 亚洲色图影院 | 日韩毛片高清在线播放 | 欧美成人一二三区 | 日韩精品电影 | 国产精品一国产精品 | 午夜国产精品视频 | 国内一区二区视频 | www,久久久 | 天天爽夜夜操 | 亚洲高清成人 | 国产成人精品网站 | 男人天堂a在线 | 18p在线观看| fc2ppv在线播放 | 视频在线观看一区二区 | 韩国19主播内部福利vip | 人人看人人做 | 菠萝菠萝蜜网站 | 麻豆传媒在线观看 | 操碰在线观看 | 调教女m荡骚贱淫故事 | 男女激情在线观看 | 可以直接看av的网址 | 亚洲三级国产 | 美女成人在线 | 黄色大片一级 | 青青国产视频 | 免费三片60分钟 | 五月天六月色 | 欧美色视 | 久久久久久久麻豆 | 欧美成人免费大片 | 中文字幕免费观看视频 | 五月婷婷六月合 | 国产福利视频一区二区 | 真实人妻互换毛片视频 | 精品一区二区三区免费毛片爱 | 久久精品日韩无码 | 黄色精品在线 | 毛片在线免费观看网址 | 亚洲一区二区在线视频 | 粗大的内捧猛烈进出在线视频 | 天天综合入口 | 久久精品黄aa片一区二区三区 | 又欲又污又肉又黄短文 | 一区二区三区在线视频免费观看 | 亚洲国产爱 | 久久黄色片视频 | 欧美理论视频 | 日本韩国欧美一区二区 | 国产欧美日韩综合精品一区二区三区 | 欧美午夜精品久久久久久蜜 | 国产美女自慰在线观看 | 国产亚洲成av人片在线观看桃 | 精品国产一二三 | 阿拉伯性视频xxxx | 国产一区久久 | 国产午夜精品视频 | xx视频在线观看 | 美女张开双腿让男人捅 | 亚洲三级在线观看 | 毛片在线免费播放 | 一区二区三区伦理 | 亚洲专区第一页 | 国产第一av | 美国成人av| 欧美一区二区三区免费视频 | 日韩伦理一区 | 偷拍老头老太高潮抽搐 | 91看片在线播放 | 亚洲一二三四五 |