实现同时且精确响应陀螺仪与手势拖拽交互的方法和装置及
手机技术领域
本发明涉及全景视频播放技术领域,特别是涉及一种实现Android平台全景视频
播放同时且精确响应陀螺仪与手势拖拽交互的方法和装置。
背景技术
近两年,虚拟现实技术得到了飞速的发展,例如国外的Oculus、Google、三星都发
布了自己的VR产品,包括虚拟现实硬件设备和开发使用的SDK。目前主要的VR设备有三大
类。一类是VR眼镜,这类产品需要配合手机使用,将手机插入到VR眼睛中,配合VR应用来体
验虚拟现实效果,VR应用运行于手机之上,比较有代表性的是Google的Cardboard和
DayDream View;另一类是VR头显,这类需要和电脑或者游戏主机配合使用,应用在电脑或
者主机中,VR头显只负责展示从主机或者电脑传输过来的影像信号,例如HTC VIVE;最后一
类称为VR一体机,也就是不需要借助其他设备,用户只需要带上这个设备,在任何地方都能
体验VR效果。
目前这些VR设备上主流的应用形式有两大类,一类是游戏应用,而另一类就是全
景视频应用。全景视频不同于传统视频,提供了一种全新的交互方式和体验。如何为用户提
供更逼真的虚拟现实体验成为我们首先需要解决的问题。
目前国内外也有不少研究全景视频技术的公司,比如Google公司发布的DayDream
SDK(前身是Carboard SDK),该SDK提供了一种根据陀螺仪数据变化变换观看角度来实现全
景视频播放的方式。
在与用户的动作交互上主要存在两类问题:一是大部分的只支持单一的交互方
式,即根据陀螺仪数据变化来调整视角的方式。部分产品虽然也支持手势拖拽和陀螺仪两
者,但是并不能对两者同时进行响应,只能在陀螺仪模式和手势拖拽模式间切换,如UtoVR
等;二是大部分产品在响应陀螺仪时都是利用陀螺仪的原始数据直接处理,而有些手机陀
螺仪数据往往是不够精确的,而且陀螺仪旋转数据变化经常会存在一定的抖动现象,即手
机静止时,陀螺仪返回的数据有时也会发生一定的变化,就导致最终在播放视频时移动手
机可能会导致视频抖动,用户体验较差。
发明内容
本发明的目的是针对现有技术中存在的技术缺陷,而提供一种实现Android平台
全景视频播放同时且精确响应陀螺仪与手势拖拽交互的方法和装置。
为实现本发明的目的所采用的技术方案是:
一种实现同时且精确响应陀螺仪与手势拖拽交互的方法,包括,
在Android视频图像绘制的目标视图上建立一个球面模型,创建一个用于控制视
角的相机并放置在球面模型的球心位置;
播放器对全景视频进行解码操作并生成视频纹理,然后将视频纹理附着在所述的
球面模型的内表面,
同时监听手机的陀螺仪变化和手机屏幕上的手势拖拽操作,当获取到陀螺仪的原
始数据并将它转换成旋转矩阵的形式,将陀螺仪旋转矩阵中的每一个数据项采用低通滤波
器进行过滤以把过高的变化值滤掉,然后将旋转矩阵应用到放置于球心的相机上使其做同
样的旋转变换,当监听获取到用户在屏幕上横向拖拽的距离和方向并控制球面模型绕相机
自身坐标系的X轴或Y轴按拖拽的方向进行旋转。
所述的低通过滤器的处理方法为,
R[n]=R[n-1]+a*(X[n]-R[n-1])
其中X[n]代表当前陀螺仪采集到的旋转矩阵中的某一元素值,R[n-1]代表上一次
计算完后真正用于旋转变换的旋转矩阵中的某一元素值,R[n]代表矫正后的结果值,a是矫
正因子。
获取到用户在屏幕上横向拖拽的距离和方向,然后使得球面模型绕相机自身坐标
系的Y轴按拖拽的方向进行旋转,旋转的角度大小与拖拽的距离相对应;获取到用户在屏幕
上纵向拖拽的距离和方向,然后使得球面模型绕相机自身坐标系的X轴按拖拽的方向进行
旋转,旋转的角度大小与拖拽的距离相对应。
利用OpenGL ES创建所述的球面模型和相机。
一种实现同时且精确响应陀螺仪与手势拖拽交互的装置,包括,
建模模块,用以在Android视频图像绘制的目标视图上建立一个球面模型,创建一
个用于控制视角的相机并放置在球面模型的球心位置;
播放模块,用以对全景视频进行解码操作并生成视频纹理,然后将视频纹理附着
在所述的球面模型的内表面,
旋转模块,同时监听手机的陀螺仪变化和手机屏幕上的手势拖拽操作,当获取到
陀螺仪的原始数据并将它转换成旋转矩阵的形式,将陀螺仪旋转矩阵中的每一个数据项进
行过滤以把过高的变化值滤掉,然后将旋转矩阵应用到放置于球心的相机上使其做同样的
旋转变换,当监听获取到用户在屏幕上横向拖拽的距离和方向并控制球面模型绕相机自身
坐标系的X轴或Y轴按拖拽的方向进行旋转。
所述的低通过滤器的处理方法为,
R[n]=R[n-1]+a*(X[n]-R[n-1])
其中X[n]代表当前陀螺仪采集到的旋转矩阵中的某一元素值,R[n-1]代表上一次
计算完后真正用于旋转变换的旋转矩阵中的某一元素值,R[n]代表矫正后的结果值,a是矫
正因子。
利用OpenGL ES创建所述的球面模型和相机。
一种具有所述的装置的手机。
与现有技术相比,本发明的有益效果是:
本发明实现了全景视频播放时可以同时通过陀螺仪和手势拖拽来调整视频视角
的功能。针对原始的陀螺仪数据采用低通滤波器进行预处理,降低了由于陀螺仪精度问题
导致的旋转变换不平滑甚至不连贯的问题,解决了陀螺仪精度不够导致视频抖动的问题。
附图说明
图1所示为本发明的实现Android平台全景视频播放同时且精确响应陀螺仪与手
势拖拽交互的方法和装置的流程示意图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。应当理解,此处所描述
的具体实施例仅仅用以解释本发明,并不用于限定本发明。
全景视频:又称720度或者360度全景视频(以下简称“全景视频”)。不同于传统的
普通视频,全景视频可以在拍摄角度左右上下360度的任意观看动态视频,让我们有一种真
正意义上身临其境的感觉,而它将不受时间、空间和地域的限制。全景视频它不在是单一的
静态全景图片形式,而是具有景深、动态图像、声音等包罗万象,同时具备声画对位、声画同
步。
OpenGL(Open Graphics Library):OpenGL(全写Open Graphics Library)是指定
义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二
维的亦可),是一个功能强大,调用方便的底层图形库。OpenGL是行业领域中最为广泛接纳
的2D/3D图形API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、
能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL帮助程序员实现在
PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件
的开发。
OpenGL ES(OpenGL for Embedded Systems):是OpenGL三维图形API的子集,针对
手机、PDA和游戏主机等嵌入式设备而设计。
为提高控制的细粒度,本发明实现Android平台全景视频播放同时且精确响应陀
螺仪与手势拖拽交互的方法,包括,
步骤101,在Android视频图像绘制的目标视图上建立一个球面模型,创建一个用
于控制视角的相机并放置在球面模型的球心位置;
在该步骤中,可以利用利用OpenGL ES创建所述的球面模型和相机,具体的球模型
大小可以根据自己的展示需要进行调整。
步骤102,播放器对全景视频进行解码操作并生成视频纹理,然后附着在所述的球
面模型的内表面并用相机进行观看,
随着播放器对全景视频进行解码操作,会不断得取到新的视频图像,然后将这些
视频图像转换成视频纹理,然后附着在上一步骤中创建的球面模型的内表面,并随着视频
的解码操作进行,不断更新附着在球面上的视频纹理。
步骤103,同时监听手机的陀螺仪变化和手机屏幕上的手势拖拽操作,当获取到陀
螺仪的原始数据并将它转换成旋转矩阵的形式,然后将旋转矩阵应用到放置于球心的相机
上使其做同样的旋转变换;当监听获取到用户在屏幕上横向拖拽的距离和方向并控制球面
模型绕相机自身坐标系的X轴或Y轴按拖拽的方向进行旋转;具体地,获取到用户在屏幕上
横向拖拽的距离和方向,然后使得球面模型绕相机自身坐标系的Y轴按拖拽的方向进行旋
转,旋转的角度大小与拖拽的距离相对应;获取到用户在屏幕上纵向拖拽的距离和方向,然
后使得球面模型绕相机自身坐标系的X轴按拖拽的方向进行旋转,旋转的角度大小与拖拽
的距离相对应。当两个动作同时发生时分别单独控制对应模型旋转即可,两者的动作控制
上相互独立,直接是将最后的结果相叠加,减少运算量,控制更为直接便利简洁。
同时将陀螺仪旋转矩阵中的每一个数据项采用低通滤波器进行过滤,把过高的变
化值滤掉,从而消除陀螺仪的抖动使得旋转变换更平滑更连贯。
低通滤波器的具体设置方式如下,根据从陀螺仪采集到的数据,形成一个旋转矩
阵,这个矩阵不直接应用到相机上进行旋转变化。针对旋转矩阵中的每一个元素的值,按照
如下公式进行修正:
R[n]=R[n-1]+a*(X[n]-R[n-1])
其中X[n]代表当前陀螺仪采集到的旋转矩阵中的某一元素值,R[n-1]代表上一次
计算完后真正用于旋转变换的旋转矩阵中的某一元素值,R[n]代表矫正后的结果值,a矫正
因子,a的取值范围为0.1-1.2,本发明采用的是0.15。根据矫正后得到的旋转矩阵将被真正
用于旋转变化。本发明针对原始的陀螺仪数据采用低通滤波器进行预处理,降低了由于陀
螺仪精度问题导致的旋转变换不平滑甚至不连贯的问题,也解决了陀螺仪精度不够导致视
频抖动的问题。另外实现方案不依赖于具体的播放器,灵活度较高。
步骤104,在视角旋转同时利用图形库,如OpenGL ES或opengl进行模型和画面的
渲染。渲染是一直不断在进行的一个操作,即边旋转边渲染。实际渲染的内容根据旋转的角
度进行调整的。用户可以随时通过手势拖拽和移动旋转手机来调整视频观看的视角。从上
述步骤也可以看出,所有的操作都是视频渲染层的逻辑,OPENGLES只是一个图形库,渲染的
处理逻辑还是由渲染层实现,将VR的渲染处理和传统的播放器逻辑剥离开来,两者分离,没
有耦合,播放器可以自由选择,灵活度较高。因此项目可以根据实际的需要灵活选择播放
器,不存在Cardboard SDK那一类的限制。
为了同时响应陀螺仪的数据变化和手势拖拽,在用户进行手势拖拽时,按照手势
拖拽的距离和方向,对球面模型做相应的旋转变换,这种变化会使相机视角所看到的内容
发生变化;陀螺仪的处理也是类似的,而当陀螺仪数据发生变化时,使相机的旋转矩阵保持
与陀螺仪旋转方向一致。因为两种动作控制的旋转对象不同,当两个动作同时发生时,运算
也不会发生叠加,但是动作会直接体现在视角上,采用该方式的两种作用叠加实现了既能
高速响应陀螺仪旋转,同时也能通过手势拖拽调整视角的交互方式。
同时,本发明还公开了一种实现Android平台全景视频播放同时响应陀螺仪与手
势拖拽交互的装置,包括,
建模模块,用以利用OpenGL ES在Android视频图像绘制的目标视图上建立一个球
面模型,创建一个用于控制视角的相机并放置在球面模型的球心位置;
播放模块,用以对全景视频进行解码操作并生成视频纹理,然后将视频纹理附着
在所述的球面模型的内表面,
旋转模块,同时监听手机的陀螺仪变化和手机屏幕上的手势拖拽操作,当获取到
陀螺仪的原始数据并将它转换成旋转矩阵的形式,然后将旋转矩阵应用到放置于球心的相
机上使其做同样的旋转变换,当监听获取到用户在屏幕上横向拖拽的距离和方向并控制球
面模型绕相机自身坐标系的X轴或Y轴按拖拽的方向进行旋转;即,获取到用户在屏幕上横
向拖拽的距离和方向,然后使得球面模型绕相机自身坐标系的Y轴按拖拽的方向进行旋转,
旋转的角度大小与拖拽的距离相对应;获取到用户在屏幕上纵向拖拽的距离和方向,然后
使得球面模型绕相机自身坐标系的X轴按拖拽的方向进行旋转,旋转的角度大小与拖拽的
距离相对应。所述的旋转模块还包括低通滤波器,用以将陀螺仪旋转矩阵中的每一个数据
项进行过滤以把过高的变化值滤掉,得以消除陀螺仪的抖动使得旋转变换更平滑更连贯。
所述的低通过滤器的处理方法为,
R[n]=R[n-1]+a*(X[n]-R[n-1])
其中X[n]代表当前陀螺仪采集到的旋转矩阵中的某一元素值,R[n-1]代表上一次
计算完后真正用于旋转变换的旋转矩阵中的某一元素值,R[n]代表矫正后的结果值,a是矫
正因子。
渲染模块,用以在视角旋转同时利用图形库,如opengl进行模型和画面的渲染。
本发明提供了一种在Android平台上实现同时响应陀螺仪与手势拖拽交互进行全
景视频播放的装置,该装置适用于支持触屏操作且含有陀螺仪的智能手机。同时响应手机
陀螺仪和手机屏幕上的拖拽手势实现了更灵活的交互方式。用户只需要通过手势将视角拖
拽到指定方向即可,如果在观看过程中想随时变化视角也可以随时利用陀螺仪变化视角。
两种方式同时作用,用户可以根据需要灵活操作。
以上所述仅是本发明的优选实施方式,应当指出的是,对于本技术领域的普通技
术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰
也应视为本发明的保护范围。