opengl es 的学习总结

opengl es 的学习总结

基础的文章
坐标的转换
https://mp.weixin.qq.com/s/CsCzQP-tSXvpN3wxC6tncQ
这里写图片描述
绘制简单的三角形
http://mp.weixin.qq.com/s/z4KsCpnU_s6MzmxfKz4d6A

读取图片的纹理 处理图片
https://blog.piasy.com/2017/10/06/Open-gl-es-android-2-part-3/

2D 纹理的裁剪、翻转、旋转、缩放
如适配摄像头的大小
本文将要展开讲的四种常用 2D 纹理变换,其核心思想就是调整纹理坐标和顶点坐标。
1,裁剪
例如把左右各 128 个像素的内容裁掉,我们就能不变形地把 896*360 的图像渲染到 640*360 的屏幕上。
通常缩放会有三种模式:

FIT_XY:宽高都填充满,如果宽高比不一致,则会发生变形;
CENTER_CROP:短边填充满,长边等比例缩放,超出部分两端裁掉;
CENTER_INSIDE:长边填充满,短边等比例缩放,不足部分两端留黑边;
其中 FIT_XY 是 OpenGL 的默认模式,我们无需做任何操作,对于 CENTER_CROP/CENTER_INSIDE 我们则可以通过调整顶点坐标进行实现。CENTER_CROP 是让顶点坐标取值范围超过 [-1, 1],超过部分会在被 OpenGL 裁掉;CENTER_INSIDE 是让顶点坐标取值范围小于 [-1, 1],不足部分则没有内容,如果我们可以通过 glClearColor 调用设置无内容区域的颜色。

裁剪、翻转、旋转这三种操作实际上都没有调整我们绘制的图形(都是“全屏”矩形),只是调整贴纹理的方式,而缩放则不调整贴纹理的方式(“全屏”纹理),它调整的是我们绘制的图形。

由于安卓相机输出的纹理是 OES 纹理,而在 OES 纹理中,wrap mode 我们只能使用 GL_CLAMP_TO_EDGE,所以相机采集的预览,就一定是边缘像素重复的效果(参考

设置图片模式

照相机增加滤镜的效果
[Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)]http://so.csdn.net/so/search/s.do?q=android&t=blog

Android利用硬解码和OpenGL ES来高效处理MP4视频

最近工作中遇到一个问题,就是要对视频增加视频特效,实现类似于抖音的效果,抖音的效果由其他同事实现,我的工作重心在视频的处理,特效的集成

处理的方法:

利用MediaExtractor获取Mp4的音轨和视轨,获取音频视频的 MediaFormat.

根据音视频信息,创建视频解码器,视频编码器,音频暂时不处理就不创建编解码器了。其中视频解码器的Surface是通过先创建一个 SurfaceTexture,然后将这个SurfaceTexture 作为参数创建的,这样的话,视频流就可以通过这个 SurfaceTexture 提供给OpenGL环境作为输出。视频编码器的 Surface 可直接调用 createInputSurface()方法创建,这个 Surface 后续传递给OpenGL环境作为输出

创建 MediaMuxer,用于后面合成处理后的视频和音频。

创建 OpenGL 环境,用于处理视频图像,这个 OpenGL 环境由 EGL 创建,EGLSurface 为 WindowSurface,并以编码器创建的 Surface 作为参数。

MediaExtractor 读取原始 Mp4 中的视频流,交由解码器解码到Surface上。

SurfaceTexture 监听有视频帧时,通知 OpenGL 线程工作,处理视频图像,并渲染。

OpenGL 线程每次渲染完毕,通知编码线程进行编码,编码后的数据通过 MediaMuxer 混合。

视频流处理完毕后,利用 MediaExtractor 读取音频流,并利用 MediaMuxer 混合到新的视频文件中。

处理完毕后调用 MediaMuxer 的 stop 方法,处理后的视频就生成成功了。

opengl el 的学习博客

http://blog.csdn.net/junzia/article/category/6462864

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值