OpenGL 基础
介绍OpenGL ES 基础知识。
美颜特效.音视频
这个作者很懒,什么都没留下…
展开
-
实时 视频 人像分割 虚化
如今,基于机器学习的人像分割/Matting任务已经比较成熟了,比如DeepLabV3 、 MODNET、OCRNet等,感兴趣的可以科普,或者联系博主微信:_shin_y。人像区域保持原始图像不变,核心是背景图像的模糊,主流的方法有高斯模糊、渐进式模糊等。感兴趣的可以科普,或者联系博主 微信:_shin_y。2: 基于分割/Matting 的虚化。1 : 人像分割部分。原创 2023-02-16 17:13:06 · 580 阅读 · 0 评论 -
smoothstep 平滑函数
smoothstep 平滑函数genType t; /* Or genDType t; */t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);return t * t * (3.0 - 2.0 * t);smoothstep(0.3, 0.6, x)图像如下:< 0.3 为0; >0.6 为1smoothstep(0.6, 0.3, x)图像如下: < 0.3 为1; >0.6 为0...原创 2020-05-26 09:34:33 · 3379 阅读 · 1 评论 -
图像变形算法
图像局部扭曲算法有三个:局部缩放(Local Scaling)算法、局部平移(Local Transition)算法局部旋转(Local Rotation)算法。其中应用局部缩放算法可实现眼睛放大,局部平移算法则可用于实现瘦脸效果。当然,图像局部缩放算法只是眼睛放大算法流程中的关键的一步,要实现自动眼睛放大算法还需要额外的步骤。简单来说,给一张美女头像,你首先需要应用自动人脸检测技...原创 2020-05-06 11:20:05 · 2912 阅读 · 1 评论 -
美颜-滤波算法
经过处理的图片或视频不但可以使用户皮肤变得清透白皙,还可以实现大眼瘦脸等功能,其中也涉及到了关于人脸检测及特征点提取等美颜算法。本文就简单分享下人人都爱的美颜算法到底是怎么回事。先来简单说下美颜(可简单分为美白和磨皮)1.用具有保边效果的滤波算法对图像进行模糊处理。2.用肤色检测算法保护非皮肤区域。3.将模糊后的图像和原图进行图像融合。4.对融合后的图像进行锐化处理。补充说...原创 2020-05-06 11:18:42 · 1067 阅读 · 2 评论 -
视频滤镜
自从抖音将视频拍摄变成有趣的事情之后,包括作者本人在内的大家都开始疯狂迷上了拍抖音和刷抖音,而类似抖音的视频类APP也开始在整个行业内展现出火热的发展趋势。个人认为,拍摄视频必不可少的就是滤镜了,有时候一不小心拍出了废片只要一换滤镜立马就能变成超有感觉的视频大作。可能在视频拍摄之余大家会好奇,这类视频APP是怎样实现滤镜功能的呢?其实这根滤镜SDK有很大的联系,本文就来简单分享下,要想做好一个...原创 2020-05-06 13:02:02 · 514 阅读 · 1 评论 -
美颜的应用
美颜SDK广泛应用于直播、短视频平台中,为用户的拍摄提供了美颜、滤镜、贴纸等多种实时特效功能,丰富了直播、短视频应用,满足了广大用户的不同需求。美颜SDK的基础功能:1.人像美颜:磨皮美白,粉嫩饱和,大眼瘦脸,调整脸型,精准高效的识别人脸相应数量的关键点并进行实时追踪,一键打造自然美妆;2.特效滤镜:拥有多种精美的滤镜可供选择,实时画面调色预览,提升镜头格调,使照片视频更具有趣...原创 2020-05-06 13:03:21 · 1526 阅读 · 1 评论 -
美颜-磨皮算法
先看一下磨皮算法的一般流程:磨皮算法主要的模块有两个:滤波模块和肤色区域检测模块;滤波模块中,包含了三种算法:1、保边滤波器滤波算法该方法是指通过一些具有保留边缘的能力的滤波器,来将图像磨平,达到皮肤平滑的目的;这类滤波器主要有:①双边滤波器②导向滤波器③Surface Blur表面模糊滤波器④局部均值滤波器⑤加权小二乘滤波器(WLS滤波器)⑥Smart...原创 2020-05-06 13:02:46 · 1551 阅读 · 1 评论 -
实时美颜算法实现流程
常见的美颜实现步骤如下:1、采取具有保边效果的滤波算法对图像进行模糊处理这里所说的滤波算法,可以选择双边滤波、表面模糊或导向滤波等,在这里需要注意选择高斯模糊是不太行的,这里的运算速度会直接影响后期的美颜速率。2、用肤色检测的算法保护非皮肤区域3、将模糊之后的图像和原图进行图像融合这一步可以采用基于alpha的图像融合,主要是为了增加美颜后人像皮肤的质感,避免美颜后出现失真的效...原创 2020-05-06 14:05:45 · 3580 阅读 · 1 评论 -
android 在NativeActivity上重新初始化OpenGL ES 2窗口
我们正在将一个大型C应用程序移植到Android,并且在暂停和恢复该应用程序之前一切运行良好.我们听APP_CMD_INIT_WINDOW命令,当它出现时,我们重新初始化所有egl命令以获取表面,上下文和显示.此后,屏幕为黑色.但是,如果我们在设置glClearColor后像预期的那样设置它,这意味着我们至少具有该窗口并且可以将其绘制到该窗口.这使我们相信,可能还有其他未初始化的内容.我的问题...原创 2020-04-30 11:44:19 · 732 阅读 · 1 评论 -
GLSurfaceView 线程交互 queueEvent
GLSurfaceView.Renderer 有三个方法:onSurfaceCreated():在开始渲染的时候被调用,无论什么时候OpenGL ES 渲染不得不重新被创建。(渲染是典型的丢失并重新创建当活动被暂停或恢复。)该方法一个创建长生命周期OpenGL资源(如材质)的好地方。onSurfaceChanged():该方法在surface大小改变时被调用。这是设置你opengl视图端...原创 2020-04-25 17:01:34 · 2774 阅读 · 2 评论 -
glCullFace 、 glFrontFace
glCullFace 和 glFrontFace这两个都是opengl的初级命令,但是其实我都是最近才算得上“用”,以前的话,是因为有一次做billboard广告牌的时候,不剔除面片其中一面的话,很难看出效果成功了没,于是用了一次;最近的话,包括shadow volume中Z-FAIL和Z-PASS都需要正反面分别渲染,shadowmap中在pass1里剔除正面,在光源视觉下渲染到纹理也用到了...原创 2020-04-23 21:53:13 · 775 阅读 · 1 评论 -
步长 渐变 单摆 公式 方法
步长 渐变 单摆方法:直接上代码:// 单摆公式。 private float calculateDist(float current, float target, float divisor) { if(divisor==0) return 0; float absCurrent = Math.abs(current); floa...原创 2020-04-23 09:54:46 · 579 阅读 · 1 评论 -
使用GLSurfaceView渲染图像 实战
大家好,接下来将为大家介绍使用GLSurfaceView渲染图像 实战。原创 2020-04-06 11:31:01 · 1060 阅读 · 1 评论 -
SurfaceTexture 详解
SurfaceTexture是从Android3.0(API 11)加入的一个新类。SurfaceTexture用来捕获视频流(stream)中的图像帧(image frame)的,视频流可以是相机预览或者视频解码数据。SurfaceTexture可以作为android.hardware.camera2、MediaCodec、MediaPlayer、和 VideoDecode这些类的目标视频数据输...原创 2020-04-20 16:23:42 · 10224 阅读 · 1 评论 -
OpenGL ES 3. 非常好用的shader工具类
大家好,接下来将为大家介绍OpenGL ES 3. 非常好用的shader工具类。import java.io.ByteArrayOutputStream;import java.io.InputStream;import android.content.res.Resources;import android.opengl.GLES30;import android.util...原创 2020-04-06 20:44:11 · 654 阅读 · 1 评论 -
OpenGL ES 3. 非常好用的矩阵操作类
大家好,接下来将为大家介绍OpenGL ES 3. 非常好用的矩阵操作类MatrixState 。如前述内容所介绍的知识,我们知道OpenGL ES中经常涉及到的矩阵有:a:投影矩阵:mProjMatrix;b:摄像机矩阵:mVMatrix;c:模型加载:currMatrix;具体的各个函数方法都有详细的注释,直接上代码:import java.nio.ByteBuffe...原创 2020-04-06 20:40:28 · 557 阅读 · 1 评论 -
OpenGL ES 3. 天空盒 立方体贴图
大家好,接下来将为大家介绍OpenGL ES 3. 天空盒 立方体贴图。OpenGL ES 立方体贴图本质上还是纹理映射,是一种 3D 纹理映射。立方体贴图所使的纹理称为立方图纹理,它是由 6 个单独的 2D 纹理组成,每个 2D 纹理是立方图的一个面。原创 2020-04-06 18:02:04 · 1102 阅读 · 1 评论 -
模型加载库 Assimp
大家好,接下来将为大家介绍模型加载库 Assimp 。Assimp 全称为 Open Asset Import Library,可以支持几十种不同格式的模型文件的解析(同样也可以导出部分模型格式),Assimp 本身是 C++ 库,可以跨平台使用。Assimp 可以将几十种模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。...原创 2020-04-06 15:46:27 · 2937 阅读 · 4 评论 -
OpenGL ES 3. OBJ文件渲染
大家好,接下来将为大家介绍OpenGL ES 3. OBJ文件渲染。由于OBJ文本文件是按照一定的规则储存的(详见上一节内容介绍),所以,我们首先介绍OBJ文件的加载解析,加载后用于渲染物体的 LoadedObjectVertexNormalTexture 类。介绍加载顶点坐标、三角形面、纹理坐标等信息。原创 2020-04-06 16:19:42 · 1979 阅读 · 1 评论 -
OpenGL ES 3. 3D之OBJ文件详解
大家好,接下来将为大家介绍OpenGL ES 3. 3D之OBJ文件详解。1、OBJ介绍obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过Maya读写。...原创 2020-04-06 12:25:27 · 831 阅读 · 1 评论 -
OpenGL ES 3. 混合详解
大家好,接下来将为大家介绍OpenGL ES 3. 混合。现实世界中有很多半透明的物体,如果希望在场景中真实再现此类物体,最常用的技术就是混合。 颜色缓冲区存储着像素点的颜色信息,当深度缓冲区开启时,当该像素点深度小于原来的深度时的颜色信息就会被替换为新的颜色信息。当我们的颜色携带透明度信息时,就需要用到混合。原创 2020-04-05 22:18:28 · 1280 阅读 · 1 评论 -
OpenGL ES 3. 光照-镜面光
大家好,接下来将为大家介绍OpenGL ES 3. 光照-镜面光。现实世界中,当光滑表面被照射时会有方向很集中的反射光。这就是镜面光(Specular)。 与散射光最终强度仅依赖于入射光与被照射点法向量的夹角不同,镜面光的最终强度还依赖于观察者的位置。也就是说,如果从摄像机到被照射点的向量不在反射光方向集中的范围内,观察者将不会看到镜面光。原创 2020-04-05 19:46:28 · 1001 阅读 · 1 评论 -
OpenGL ES 3. 光照-散射光
大家好,接下来将为大家介绍OpenGL ES 3. 光照-散射光。OpenGL ES 3.0 中采用的光照模型相对现实世界进行了很大的简化,将光照分成了 3 种组成元素(也可以称为 3 个通道),包括环境光、散射光 以及 镜面光。1、散射光介绍 仅仅有环环境光的场景效果是很差的,没有层次感。接下来将介绍另外一种真实感好很多的光照效果—散射光(Diffuse),其指的是从物体...原创 2020-04-05 18:42:21 · 743 阅读 · 1 评论 -
OpenGL ES 3. 光照-环境光
大家好,接下来将为大家介绍OpenGL ES 3. 光照-环境光。OpenGL ES 3.0 中采用的光照模型相对现实世界进行了很大的简化,将光照分成了 3 种组成元素(也可以称为 3 个通道),包括环境光、散射光 以及 镜面光。1、环境光介绍环环境光(Ambient)指的是从四面八方照射到物体上,全方位 360°都均匀的光。其代表的是现实世界中从光源射出,经过多次反射后,各方向基本...原创 2020-04-05 17:38:33 · 609 阅读 · 1 评论 -
OpenGL ES 3. 绘制球体 实战
大家好,接下来将为大家介绍OpenGL ES 3. 绘制球体。 OpenGL ES 中任何形状的 3D 物体都是用三角形而成的, 因此,构建面物体最重要的就是到将面恰当划分成三角形的策略。最基本的策略是首先按照一定的规则将物体按行和列两个方向进行划分,这时就可以得到很多的小四边形。然后再将每个小四边形划分成两个三角形即可。 球面首先被按照度 (行)...原创 2020-04-05 15:59:45 · 2292 阅读 · 1 评论 -
OpenGL ES 3. 纹理映射详述
大家好,接下来将为大家介绍OpenGL ES 3. 纹理映射。1、纹理映射原理启用纹理映射功能后,如果想把纹理应用到相应的几何图元,就必须告知渲染系统如何 进行纹理的映射。告知的方式就是为图元中的顶点指定恰当的纹理坐标,纹理坐标用浮点数来表 示,范围一般从 0.0 到 1.0 。如下图所示,要想将正三角形纹理正确的显示出来,需要告诉OpenGL,三角形中每个顶点的纹理坐标是多少(左...原创 2020-04-04 13:36:52 · 3055 阅读 · 1 评论 -
OpenGL ES 3. 纹理采样 详述
大家好,接下来将为大家介绍OpenGL ES 3. 纹理采样。纹理采样就是根据片元的纹理坐标到纹理图中取对应位置颜色的过程。但由于被渲染图元中的片元数量与其对应纹理区域中像素的数量并不一定相同,也 就是说图元中的片元与纹理图中的像素并不总是一一对应的。例如,将较小的纹理图映射到较大的图元或将较大的纹理图映射到较小的图元时这种情况就 会产生。因此,通过纹理坐标在纹理图中并不一定能得到与之完全对应的像素,这时就需要采用一些策略使得纹理采样可以顺序进行下去。通常采用的策略有最近点采样、线性采样两种,原创 2020-04-04 22:12:01 · 2343 阅读 · 2 评论 -
OpenGL ES 3. Mipmap 纹理
大家好,接下来将为大家介绍OpenGL ES 3. Mipmap 纹理(多级渐远纹理)。 当需要处理的场景很大时,若不采用一些技术手段,可能会出现远处地形视觉上更清楚,近处地形更模的反真实现象。 这主要是由于透视投影中有近大远小的效果,远处的地形投影到屏幕上尺寸比较小,近处的尺寸 比较大,而整个场景使用的是同一纹理图。因此,对远处的体而言纹理图被缩小进行映射,自然很清楚;而...原创 2020-04-05 10:07:34 · 1541 阅读 · 2 评论 -
OpenGL ES 3. 纹理环绕
大家好,接下来将为大家介绍OpenGL ES 3.纹理环绕。纹理坐标的范围通常是从(0, 0)到(1, 1),那如果我们把纹理坐标设置在范围之外会发生什么?无论是 S 轴还是 T 轴的纹理坐标都是在 0.0~1.0 的范围内,这满足了大多数情况。但在特定的情况下,也可以设置大于 1 的纹理坐标。当纹理坐标大于 1 以后,设置的方式就会起作用了。1、重复纹理环绕...原创 2020-04-05 08:40:21 · 496 阅读 · 1 评论 -
OpenGL ES 3. 纹理基础
大家好,接下来将为大家介绍OpenGL ES 3. 纹理基础。1、读取文件将储存的图片文件读取到内存(方法很多)。InputStream is = this.getResources().openRawResource(path);Bitmap bitmapTmp;try { bitmapTmp = BitmapFactory.decodeStream(is);} f...原创 2020-04-05 07:33:42 · 457 阅读 · 1 评论 -
OpenGL ES 3. 绘制方式 详解
大家好,接下来将为大家介绍OpenGL ES 3. 绘制方式。OpenGL ES 3. 的绘制方式有两种:顶点法与索引法。1、顶点法调用glDrawArrays方法来进行物体的绘制,此方法是按照传入渲染管线顶点本身的顺序及选用的绘制方式将顶点组织成图元进行绘制的,称为顶点法。其api接口如下:public static native void glDrawArrays( ...原创 2020-04-03 10:09:19 · 481 阅读 · 1 评论 -
OpenGL ES 3. 坐标系及坐标变换
大家好,接下来将为大家介绍OpenGL ES 3. 坐标及坐标系。一、坐标系、坐标空间:OpenGL共有5个比较重要的坐标空间:a:局部空间(Local Space,或者称为物体空间(Object Space))。b:世界空间(World Space)。c:观察空间(View Space,或者称为视觉空间(Eye Space))。d:裁剪空间(Clip Space)。e...原创 2020-04-03 21:27:52 · 860 阅读 · 1 评论 -
OpenGL ES 3. 顶点坐标 纹理坐标
大家好,接下来将为大家介绍OpenGL ES 3. 顶点坐标 纹理坐标。上一节我们介绍了OpenGL ES 3. 坐标系及坐标变换。了解坐标系是渲染绘制图形的基础。在实际OpenGL的开发中,有世界坐标、纹理坐标、屏幕坐标等几种。1、顶点坐标首先需要明确的是,OpenGL使用的是笛卡尔右手坐标系,如下图所示。分X Y Z 3个轴,X轴朝右为正,Y轴朝上为正,Z轴垂直屏幕朝外...原创 2020-04-04 10:46:57 · 3489 阅读 · 3 评论 -
GLSurfaceView 使用详解
大家好,接下来将为大家介绍GLSurfaceView 。1、GLSurfaceView上一节为大家介绍了SurfaceView 与 TextureView 。但是,学习在Android中使用OpenGL ES,就不得不提到一个控件:GLSurfaceView。而GLSurfaceView继承自SurfaceView,其实是对SurfaceView再做了一次封装,可以看作是Surfac...原创 2020-04-03 16:35:26 · 7700 阅读 · 2 评论 -
EGL 作用及其使用
大家好,接下来将为大家介绍EGL 作用及其使用。1、什么是EGLEGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,EGL作为OpenGL ES与显示设备的桥梁,让OpenGL ES绘制的内容能够在呈现当前设备上。它主要由系统制造商实现。EGL具有如下作用:a:与设备的原生窗口系统通信。...原创 2020-04-03 17:47:01 · 3705 阅读 · 1 评论 -
OpenGL ES 3. 图元组装方式
大家好,接下来将为大家介绍OpenGL ES 3. 的图元组装方式。OpenGL ES 中支持的绘制方式大致分 3 类,包括点、线段、三角形,每类中包括一种或多种具体的绘制方式,各种具体绘制方式的说明如下所列。1、点绘制:GL_POINTS。其将传入渲染管线的一系列顶点单独进行绘制,具体情况如下图所示。2.1、线绘制:GL_LINES。其将传入渲染管线的一系列顶点按照...原创 2020-04-03 09:32:34 · 1348 阅读 · 1 评论 -
SurfaceView 与 TextureView 使用
大家好,接下来将为大家介绍SurfaceView与TextureView 。1、SurfaceViewSurfaceView继承自View,并提供了一个独立的绘图层Surface,这个Surface在WMS中有自己对应的WindowState,在SF中也会有自己的Layer。你可以完全控制SurfaceView,比如说设定它的大小,所以SurfaceView可以嵌入到View结构树中,需要...原创 2020-04-03 15:34:40 · 982 阅读 · 2 评论 -
OpenGL ES 3. 基本变换
大家好,接下来将为大家介绍OpenGL ES 3. 基本变换。OpenGL ES 3. 基本变换 包括 平移、旋转、缩放等几类。如上这3种变换的矩阵都将会改变物体在3D空间中的位置和姿态,我们把“物体的位置和姿态”矩阵称为模型矩阵。1、平移变换import android.opengl.Matrix;//存储系统矩阵状态的...原创 2020-04-04 18:15:20 · 1465 阅读 · 1 评论 -
OpenGL ES 3. 投影方式 详述
大家好,接下来为大家介绍OpenGL ES 3. 的投影方式。1、摄像机的设置 从日常生活的经验中可以很容易地了解到,随着摄像机位置、姿态的不同,就算是对同一 个场景进行拍摄,得到的画面也是迥然不同的。因此摄像机的位置、姿态在OpenGL ES 应用程序的开发中就显得非常重要,首先需要介绍一下摄像机的设置方法。摄像机的设置需要给出 3 方面的信息,包括摄像机的位置、观察的...原创 2020-04-03 11:31:17 · 664 阅读 · 1 评论 -
OpenGL ES 3. 着色器 shader 的编译和使用
大家好,接下来将为大家介绍OpenGL ES 3. 着色器 shader 的编译和使用。1、OpenGL ES 3. 着色器 shader 的编译下图很直观的表述了顶点着色器 和 片元着色器的编译过程。a:glCreateShader//创建一个新shaderb:glShaderSource//加载shader的源代码c:glCompileShader//编译shad...原创 2020-04-04 16:00:11 · 1509 阅读 · 1 评论