
vr,opengl
文章平均质量分 83
lvchao_1984
视频codec,vr等等笔记
展开
-
Shader语言的一些简单解释和备注
先以一对Shader的代码为例子开始: private final String mVertexShader = "uniform mat4 uMVPMatrix;\n" + "uniform mat4 uSTMatrix;\n" + "attribute vec4 aPosition;\原创 2016-09-20 10:19:10 · 3901 阅读 · 0 评论 -
使用Opengl PBO上传下载数据
PBO(pixel buffer object)是储存像素数据的缓冲区对象,主要有两个用途:1. 上传一帧像素数据到PBO中,GL_UNPACK_ALIGNMENT2. 从PBO中读取像素到cpu内存空间, GL_PIXEL_PACK_BUFFER其实不使用PBO也可以上传下载数据,那么PBO好处何在?我们对比两种方式上传yuv420数据:使用PBO的方法:1. 创原创 2017-08-07 19:26:10 · 2466 阅读 · 0 评论 -
笔记,安卓上简单的surfaceview使用
建立基于GLSurfaceView的类:public class MyGLSurfaceView extends GLSurfaceView {初始化:1. onSurfaceCreated:a) mProgram = createProgram(mVertexShader, mFragmentShader); vao, vertex, coords handleb原创 2017-07-25 17:32:31 · 438 阅读 · 0 评论 -
离屏渲染FBO中使用depth信息
在显示窗口中使用的framebuffer,opengl渲染管线会自动创建一个颜色渲染区(color),一个深度渲染缓冲区(depth)和一个模板渲染缓冲区(stencil),开启glEnable(GL_DEPTH_TEST)就可以了。然而在离屏渲染自己创建的framebuffer中,这几个需要手动创建。需要哪个创建哪个。之前在基于ffmpeg中添加的离屏渲染filter中只原创 2017-06-21 16:54:42 · 942 阅读 · 0 评论 -
处理opengl使用fbo贴图时产生的锯齿
背景描述:在使用artools的矩阵进行贴图的时候,发现在我自己的滤镜里贴图会有明显锯齿。学习了一下,这种锯齿被称作aliasing,反锯齿被称作anti-aliasing。比较常用的方法是MSAA(Multisample Anti- Aliasing),该方法已经在opengl里实现了,对于使用窗口的opengl程序来说,仅仅需要设置sample的数目,然后glEnable(原创 2017-05-16 15:38:54 · 2099 阅读 · 0 评论 -
opengl在linux上进行离屏渲染
opengl往往初始化需要使用glutinit之类创建窗口的函数,而对于某些开发,比如ffmpeg中间的滤镜,我们是不希望创建这种窗口的。这时候需要使用离屏渲染的方法在代码中对opengl进行初始化。在linux上使用离屏渲染的前提是运行在图形界面X window。所以ssh之类的非图形界面远程是起不来的。这里我们需要GLX相关的函数来建立context。首先拿到glXCreate原创 2017-05-24 11:16:45 · 4744 阅读 · 2 评论 -
基于陀螺仪的全景视频播放器基础上,增加手指拖动旋转的效果
笔记一下:背景:手机全景播放app,放向根据陀螺仪调整。需求:增加一个功能,手指滑动屏幕,可以调整坐标系方向。或者关闭陀螺仪仅仅用手指操作方向。方法:1. 根据触摸的api得到精度和纬度方向旋转角度,thOffset,laOffset。(实现略)2. 根据thOffset,laOffset计算旋转后在球面上的矢量,(lookX, lookY, lookZ)。因为在球坐标原创 2017-04-14 11:09:59 · 1432 阅读 · 0 评论 -
linux上在不建立窗口的情况下使用opengl
之前遇到的问题是,在linux上基于ffmpeg增加使用opengl的模块,opengl只是用来映射投影等等,并不需要窗口显示到screen。所以需要使用一种方法不会创建screen还能对opengl进行初始化和正常使用。首先需要启动linux下的 window X图形界面,目的是利用OpenGL 3.0增加的接口glXCreateContextAttribsARB。该接口同时还需要G原创 2017-03-31 15:18:14 · 4718 阅读 · 6 评论 -
ARTool初步涉足,从simpleLite.c里opengl的流程开始
刚接触ARTool,基于ARToolKit5-bin-5.3.2r1-Linux-x86_64.tar.gz,简单笔记一下,simpleLite.c作用是读入视频,找到对应贴图位置,然后贴一个六面体。这里主要分析了一下相关代码opengl的作用和流程。这里在代码中笔记一下重要流程的comment。主函数是Display()。根据解码后的一帧,和之前找到的需要贴图六面体的位置,进行贴原创 2017-03-30 17:50:57 · 1445 阅读 · 0 评论 -
vr视频六面体转换的Equi-Angular优化以及实现
本篇主要基于facebook之前提出的vr视频转cube六面体的方案,根据文章里的优化算法对其进行优化,并实现播放。关于之前六面体的映射方法,facebook早早就提供了基于ffmpeg的滤镜vf_transform.c,其他相关请参考我另一篇笔记:http://blog.youkuaiyun.com/defence006/article/details/52459543这里主要是针对原创 2017-03-29 19:03:45 · 2972 阅读 · 1 评论 -
vr四棱锥视频文件通过opengl在手机端播放全景视频
输入是一个正方形vr四棱锥变换后的视频,目的是手机上反映射播放全景视频。app的demo基于native-media进行改动,因为大部分都是针对opengl ES的改动,所以主要修改文件为MyGLSurfaceView.java。其他改动都是些界面或者按钮的改动,这里不赘述了。这里主要讲解一下opengl这部分的流程。1. 建立两个shader,vertexShader和fra原创 2016-09-20 14:35:39 · 1633 阅读 · 1 评论 -
180度vr直播用,鱼眼视频展开到全景
对于180度vr的直播,一般来说低成本的做法是采用鱼眼镜头拍摄整个180度的视频。鱼眼镜头成像过程:不同的鱼眼镜头有不同的成像方式,我们采用的也是比较常用的等距投影模型。对于输入来说,由于镜头的成像范围,我们的输入是一部分的鱼眼图。输出我们希望是一个全景图,该图可以在带上vr头盔后以180度范围观看全景。也就是鱼眼到全景的转换。关于鱼眼展开到全景图的原创 2017-01-21 15:31:36 · 10925 阅读 · 4 评论 -
vr视频简介
常见的vr视频大部分都是基于柱面(或者称为球面)的,比如:其原理和地球仪展开是一样的,越接近南北极柱面展开的图像畸变越大:从codec的角度看,这种视频其实很不适合编码,因为当畸变区域较大的地方出现运动,运动估计效果是很不好的。毕竟现在所有的codec在me方面都是以平移为最佳,这种引入很多形变的vr视频不仅不利于压缩,其中很多内容也是冗余的。如何可以更好的处理呢?face原创 2016-09-07 14:26:45 · 1101 阅读 · 0 评论 -
vr视频六面体变换
本文会对facebook的开源filter:vf_transform.c 做代码级分析,解释vr视频是如何做六面体转换的。转换的关键其实就是输入vr视频到六面体的映射(也就是下图中蓝色图像映射到红色图像):假设每个正方形的像素是512x512个,那么对于(x, y)这个像素值来说,想得到这个值,我只需要从原点,拉一条直线连接到(x, y)并沿着这条直线一直打到球面上,得到的像素值就原创 2016-09-07 14:48:42 · 3596 阅读 · 0 评论 -
opengl基础,学习笔记
Opengl里的四维变换矩阵对三维坐标做变换时常用到四维变换矩阵,如图,红色是对x轴坐标的变换,绿色是对y轴,紫色是对z轴。最右面的(m12,m13,m14)是用于translation transformation, glTranslatef().最后一个m15是用于齐次坐标,投影变换的时候会用到。http://www.songho.ca/opengl/g原创 2017-03-01 15:23:48 · 983 阅读 · 0 评论