OpenGL
文章平均质量分 82
Martin20150405
博客搬家啦,http://martin20150405.github.io
(邮箱Martin20150405@163.com)
展开
-
[OpenGL]从零开始写一个Android平台下的全景视频播放器——1.1 OpenGL ES 2.0基础知识
基本概念与说明OpenGL是一个图形API,用来绘制,OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集。Android平台下,对于OpenGL ES有一套Java的封装,编程时可以避免使用NDK,OpenGL ES 2.0 支持可编程管线(什么是可编程?之后会解释)OpenGL 的基本形状是三角形,无论是绘制形状还是填充,原创 2016-11-13 16:48:54 · 4614 阅读 · 0 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.3 如何实现分屏效果
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录分屏就是分两个区域显示,以配合眼镜实现一定的3D效果,这两个区域的内容理论上应该不同,但是很多播放器都是使用完全相同的内容进行显示。 实际上,如果只有一路视频输入,那么视差也只能是伪视差简易版GLES20.glViewport(0,0,screenWidth/2,screenH原创 2017-01-29 08:29:55 · 3738 阅读 · 6 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.4 响应用户的单指触控事件(平移)
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录除了根据传感器来控制以外,还应该支持使用手指平移的操作触控事件的分发与监听初学安卓时应该经常会看到这样的代码:btn.setOnClickListener(new View.OnClickListener() { @Override public void onC原创 2017-01-29 15:15:43 · 1597 阅读 · 4 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.7 使用OpenGL ES接口保存屏幕截图
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录读取OpenGL渲染结果读取OpenGL渲染结果就是把渲染结果的像素矩阵导出(从本地内存复制到java数组,但都在内存中) 然而。。 就是这么简单的操作也并没有什么很好的解决方案 目前常见的主要有这几种:glReadPixels :最常用,但是慢的要死,会阻塞整个GL线程原创 2017-01-29 19:11:34 · 2211 阅读 · 0 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.6 播放器的UI制作
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录每个人对于UI都有不同的理解,而且UI也不是这系列文章的重点,所以我们主要讨论一些常见问题,尽量让大家少踩坑模式切换模式主要有单双屏、陀螺仪/触控,以及两者的互相组合,不同的模式对于MVP矩阵的处理不同,还需要考虑应用隐藏到后台时的资源释放/保存问题一般GL上下文在应用资源不足时原创 2017-01-29 19:42:57 · 1545 阅读 · 0 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.8 使用MediaPlayer播放在线视频
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录MediaPlayer是可以播放在线视频的,其解码能力取决于手机本身如果有更多格式或更加通用的解码需求,可以考虑使用其他的解码器。例如FFMpeg就很好,可以使用FFMpeg的Java包装版本——ijkplayer播放在线视频播放在线视频的方法和本地视频基本一致,如果是本地视频,原创 2017-01-29 20:12:42 · 2943 阅读 · 1 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——3.1 全景视频是如何实现的
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录恭喜Martin同学获得由CSDN颁发的“更新慢慢慢”荣誉称号全景视频有很多种类,例如Sphere全景,Skybox(Cubemap),Cylinder等,我们以最为常见的Sphere全景视频为例进行说明。原理其实要说明这个问题,只需要几张图360全景视频截图 仔细观察我们会发现,视频的底原创 2016-12-17 21:13:46 · 7859 阅读 · 2 评论 -
[OpenGL]矩阵乘法引发的血案
最近被矩阵乘法折腾的死去活来,感觉要打回去重新学线代了。Matrix定义OpenGL中Matrix被定义成一个列主序的矩阵,大小为3x3或者4x4/** * Matrix math utilities. These methods operate on OpenGL ES format * matrices and vectors stored in float arrays. * <p>原创 2017-03-12 14:33:48 · 2875 阅读 · 0 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——1.2 GPGPU解决方案简述
移动平台 GPU加速方案简述原创 2017-01-29 20:48:12 · 2880 阅读 · 0 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——2.2 来一份LOMO滤镜
Android 简单滤镜 图像处理原创 2017-02-09 19:31:59 · 2922 阅读 · 0 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.5 响应用户的多指触控事件(缩放)
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录先贴代码再讲原理吧缩放事件(Scale)监听和Scroll一样,Scale也有一个辅助类帮我们来记录用户的缩放操作(代码是缩放和平移的整合版)private GestureDetector gestureDetector;private ScaleGestureDetecto原创 2017-01-29 17:50:54 · 1983 阅读 · 0 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——2.4 滤镜以及配套代码的制作方法
Github项目地址好久没有更新了,不行不行,怎么可以太监呢(`⌒´メ)滤镜结构滤镜主要是对于图像的处理,关于一款滤镜的制作方法可以看这里既然是图像处理,那么滤镜的操作就主要是:卷积、像素映射、坐标映射,反映到具体效果上,就是模糊锐化,覆盖层(贴纸等),RGB曲线调整,旋转缩放扭曲之类的。嗯,就这么简单。图像处理可以使用CPU来进行,但是由于我们每次只对图像的一小部分进行处理,因此可以考虑用并行的方原创 2017-05-06 11:23:32 · 10497 阅读 · 0 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——目录
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)先放一张效果图: Youtube 优酷前言Android平台下的全景视频(360,Panorama video)播放器是去年年底留的坑,那个时候对于OpenGL ES了解有限,而且现有的开源代码也不多(那个时候UtoVR SDK也还没发布),现有的解决方案像原创 2016-11-13 16:07:15 · 15754 阅读 · 33 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.2 使用旋转矢量传感器改变球的朝向
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录今天是春节,马上就要元宵了,提前祝大家国庆节快乐,不要忘了吃粽子哦~话说春晚都把全景视频说成VR了,这是硬生生要拉低VR水准啊(逃…现在我们已经离成功很接近了,因为在上一节我们已经将一个视频贴到了球上,现在只需要结合传感器就可以实现对球体的自由控制。注册传感器private s原创 2017-01-28 09:05:44 · 3825 阅读 · 4 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——4.3 怎么都搞不清楚的几个坐标系
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)回到目录OpenGL世界坐标系(3D)剪裁区间: −1≤X≤1,−1≤Y≤1,−1≤Z≤1-1 \le X \le 1,-1 \le Y \le 1,-1 \le Z \le 1OpenGL世界坐标系是右手系,比较广泛被接受的表示方法如下: OpenGL纹理坐标系、OpenGL屏幕坐标原创 2017-01-28 08:58:55 · 2009 阅读 · 1 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
Github项目地址,欢迎star~!为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录MediaPlayer的生命周期了解MediaPlayer的生命周期的好处是,当我们遇到各种状态异常时,可以很方便的找到出错的原因 ,具体的可以看这篇参考资料了解了MediaPlayer的生命周期后,我们大概可以把播放器的状态设定成这样(仅供参考):public enum Pan原创 2016-11-24 08:48:30 · 13383 阅读 · 2 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
Github项目地址,欢迎star~!为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录视频颠倒的问题其实,不要更新mSTMatrix,将他设为单位阵,一般就会显示正常的视频。。 在使用mSTMatrix的情况下,解决方法就是修改顶点数组或者修改纹理数组,我们采用修改顶点数组的方案:private final float[] vertexData = {原创 2016-11-24 14:07:47 · 5254 阅读 · 9 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——1.2 用OpenGL ES 2.0画一个三角形
Github项目地址,欢迎star~!为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录初始化OpenGL ES环境OpenGL ES的使用,一般包括如下几个步骤: 1. EGL Context初始化 2. OpenGL ES初始化 3. OpenGL ES设置选项与绘制 4. OpenGL ES资源释放(可选) 5原创 2016-11-13 19:52:09 · 5656 阅读 · 5 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——3.2 使用OpenGL ES 2.0绘制一个球
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录如何用OpenGL绘制一个球呢?其实方法很多,网上一搜就能搜到一大把。坐标系要想知道怎么画,当然要把坐标系先搞清楚啦,上图: 这是世界坐标(看懂这张图需要一定想象力),Y轴是和重力方向相反的,X轴和水平面齐平,我们(相机)站在Z轴上,观察点是在球内的。 这是世界坐标(3D)对应的纹理坐标(原创 2016-12-26 20:28:55 · 5087 阅读 · 5 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——参考资料
It’s a collection of references while I’m working on my own project Omoshiroi —— a fully-featured Camera/PhotoEditor/VideoRecorder app for Android, with hundreds of realtime filters (including GPU-ima原创 2017-01-28 11:29:25 · 3513 阅读 · 1 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——2.1 GPUImage结构简析
Github项目地址回到目录说到基于GPU的图像处理和实时滤镜,大家肯定会想到鼎鼎大名的GPUImage,这个项目确实为后续开发提供了很多方便,基本的图像处理工具一应俱全。IOS版的项目比较活跃,Android的好像已经被遗弃好久了,一堆bug没人解决。但是学习借鉴GPUImage的项目结构,可以为我们提供不小的帮助。GPUImage项目结构GPUImage的项目结构其实很简单,Android版本就原创 2017-02-17 20:22:55 · 5842 阅读 · 3 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——2.3 仿制Snow相机和FaceU的边框/小脸模式
Github项目地址回到目录在体验各种美颜相机时,我发现FaceU和Snow相机都带一个小脸模式(或者边框模式),像这样的效果:这是Snow相机的: 这是FaceU的: 两个看上去并不一样,因为Snow相机的默认模式就是场景优化模式(感觉Snow相机的边框更漂亮一些),不过这哪里小脸啦,图片还是一样大的好吗???!!!!本文的目标,就是仿制一个这样的边框效果。解决方案相信大家也能看出来,其实原创 2017-02-17 21:25:45 · 5668 阅读 · 2 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
Github项目地址,欢迎star~!为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录更新着色器代码因为使用了,需要更新着色器代码 fragment_shader.glsl#extension GL_OES_EGL_image_external : requireprecision mediump float;varying vec2 vTexCoord;原创 2016-11-24 12:43:41 · 5387 阅读 · 5 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——1.3 用OpenGL ES 2.0显示一张图片(上)
Github项目地址,欢迎star~!为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录解决变形问题要解决变形,我们需要引入Projection Matrix(投影矩阵)的概念,在OpenGL中,投影矩阵用来改变场景在屏幕上的显示方式(近大远小,平行投影等等)。 因为我们绘制的是二维平面,所以问题还是比较好解决的,假如我们的屏幕是16:9的(横屏情况),那么只要让原创 2016-11-13 21:51:07 · 4642 阅读 · 6 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——4.1 传感器类型以及数据收集方法
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录前方高能预警:本文没有图片,T_T传感器的使用是全景视频能够带来一定程度的“沉浸感”的关键,我们希望当用户转身时,视频也能够跟着转,而不是用户手动拖动(废话。。) 由于传感器是硬件或软件模拟的设备,以下讨论的内容大部分仅适用于Android平台。类型Android平台下的传感器类型很多,一部分是原创 2017-01-19 21:56:35 · 2891 阅读 · 2 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——4.2 屏幕朝向,手机姿态的相关概念
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录先来看一下我们还有什么基本功能没有实现:使用传感器控制球的朝向分屏平移缩放之所以需要搞清楚屏幕的朝向,是因为传感器的坐标系、OpenGL坐标系、屏幕坐标系并不是完全统一的屏幕朝向手机的屏幕朝向应该是在开发app的时候不得不面对的问题,当然,最简单的方法就是锁定屏幕的朝向。其中,Lands原创 2017-01-23 10:18:20 · 3098 阅读 · 9 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.1 使用OpenGL把全景视频贴到球上
Github项目地址为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录在第三章我们用OpenGL画了一个没有纹理的球,现在我们需要通过纹理映射将视频贴到球上。这个和画个矩形贴平面视频有任何的区别吗? 。。。。。。 好像没有带纹理映射的Sphere类直接贴代码吧,在之前的Sphere基础上,我们加入纹理映射的部分,将3D点和2D点对应起来。 有一个需要注意的问题原创 2016-12-27 09:05:50 · 4634 阅读 · 11 评论 -
[OpenGL]从零开始写一个Android平台下的全景视频播放器——1.4 用OpenGL ES 2.0显示一张图片(下)
Github项目地址,欢迎star~!为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些回到目录今天早上突然想起来,其实矩形只要两个三角形就好了嘛。我非要用四个三角形画,肯定是中了三角形扇的毒。。创建一个纹理纹理的创建比较复杂,我们创建一个新的工具类,并且加入如下代码:public class TextureHelper { private static fi原创 2016-11-14 10:06:41 · 5033 阅读 · 6 评论 -
Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——目录
Github项目地址 2017.12.22 该项目已经删除,不再更新,请不要留言或发送邮件索要代码缘起不知道什么时候开始,朋友圈和好友动态里突然充斥着大量脸部贴纸、恶搞效果,以及各种美颜过度的大头照。 这很正常嘛,我想,女生发照片当然要大个眼瘦个脸啊,直到我看到了男生也发了类似的照片。。 有人说现在是全民直播的时代,我虽然不是特别认同,但是也不得不被卷入这场由人脸技术/直播技术/图像原创 2017-02-16 20:44:28 · 8743 阅读 · 3 评论