实现同时响应陀螺仪与手势拖拽交互的方法和装置及手机与流程

文档序号:11063244阅读:491来源:国知局
实现同时响应陀螺仪与手势拖拽交互的方法和装置及手机与制造工艺

本发明涉及全景视频播放技术领域,特别是涉及一种实现Android平台全景视频播放同时响应陀螺仪与手势拖拽交互的方法和装置。



背景技术:

近两年,虚拟现实技术得到了飞速的发展,例如国外的Oculus、Google、三星都发布了自己的VR产品,包括虚拟现实硬件设备和开发使用的SDK。目前主要的VR设备有三大类。一类是VR眼镜,这类产品需要配合手机使用,将手机插入到VR眼睛中,配合VR应用来体验虚拟现实效果,VR应用运行于手机之上,比较有代表性的是Google的Cardboard和DayDreamView;另一类是VR头显,这类需要和电脑或者游戏主机配合使用,应用在电脑或者主机中,VR头显只负责展示从主机或者电脑传输过来的影像信号,例如HTCVIVE;最后一类称为VR一体机,也就是不需要借助其他设备,用户只需要带上这个设备,在任何地方都能体验VR效果。

目前这些VR设备上主流的应用形式有两大类,一类是游戏应用,而另一类就是全景视频应用。全景视频不同于传统视频,提供了一种全新的交互方式和体验。如何为用户提供更逼真的虚拟现实体验成为我们首先需要解决的问题。

目前国内外也有不少研究全景视频技术的公司,比如Google公司发布的DayDreamSDK(前身是Carboard SDK),该SDK提供了一种根据陀螺仪数据变化变换观看角度来实现全景视频播放的方式。

国内的有些公司也研发了自己的实现全景视频播放的产品。大致分为两类,一类是基于Cardboard SDK进行开发,另一类是使用自己的算法实现。根据陀螺仪变化调整视频视角。也有的公司针对手机端的产品开发了使用户可以通过手势拖拽来调整观看视角的功能。

Google的DayDreamSDK或Cardboard SDK的全景播放的方案因为使用简单,被广泛应用,但是它存在两处不足:一是它只支持根据陀螺仪数据变化来调整观看视角;二是由于该项目不开放源代码且采用了谷歌自家的播放器,因此全景播放器无法进行一些定制化修改,遇到了bug也只能等待google来解决。这对于那些对播放器有定制化需求的产品而言存在一定使用上的局限性。

而国内的产品主要存在两类问题:一是他们中的大部分的只支持单一的交互方式,即根据陀螺仪数据变化来调整视角的方式。部分产品虽然也支持手势拖拽和陀螺仪两者,但是并不能对两者同时进行响应,只能在陀螺仪模式和手势拖拽模式间切换,如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创建所述的球面模型和相机,所述的图形库为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创建所述的球面模型和相机,所述的图形库为OpenGL ES。

一种具有所述的装置的手机。

与现有技术相比,本发明的有益效果是:

(1)本发明实现了全景视频播放时可以同时通过陀螺仪和手势拖拽来调整视频视角的功能。

(2)本发明针对原始的陀螺仪数据采用低通滤波器进行预处理,降低了由于陀螺仪精度问题导致的旋转变换不平滑甚至不连贯的问题,解决了陀螺仪精度不够导致视频抖动的问题。

(3)本发明将全景视频视角变换的渲染层逻辑与播放器隔离开来,播放器可以自由选择,灵活度较高。不像Cardboard SDK两者绑定在一起,无法定制播放器。

附图说明

图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轴按拖拽的方向进行旋转,旋转的角度大小与拖拽的距离相对应。当两个动作同时发生时分别单独控制对应模型旋转即可,两者的动作控制上相互独立,直接是将最后的结果相叠加,减少运算量,控制更为直接便利简洁。

步骤104,在视角旋转同时利用图形库,如OpenGL ES或opengl进行模型和画面的渲染。渲染是一直不断在进行的一个操作,即边旋转边渲染。实际渲染的内容根据旋转的角度进行调整的。用户可以随时通过手势拖拽和移动旋转手机来调整视频观看的视角。从上述步骤也可以看出,所有的操作都是视频渲染层的逻辑,OPENGLES只是一个图形库,渲染的处理逻辑还是由渲染层实现,将VR的渲染处理和传统的播放器逻辑剥离开来,两者分离,没有耦合,播放器可以自由选择,灵活度较高。因此项目可以根据实际的需要灵活选择播放器,不存在Cardboard SDK那一类的限制。

为了同时响应陀螺仪的数据变化和手势拖拽,在用户进行手势拖拽时,按照手势拖拽的距离和方向,对球面模型做相应的旋转变换,这种变化会使相机视角所看到的内容发生变化;陀螺仪的处理也是类似的,而当陀螺仪数据发生变化时,使相机的旋转矩阵保持与陀螺仪旋转方向一致。因为两种动作控制的旋转对象不同,当两个动作同时发生时,运算也不会发生叠加,但是动作会直接体现在视角上,采用该方式的两种作用叠加实现了既能高速响应陀螺仪旋转,同时也能通过手势拖拽调整视角的交互方式。

优选地,将陀螺仪旋转矩阵中的每一个数据项采用低通滤波器进行过滤,把过高的变化值滤掉,从而消除陀螺仪的抖动使得旋转变换更平滑更连贯。

低通滤波器的具体设置方式如下,根据从陀螺仪采集到的数据,形成一个旋转矩阵,这个矩阵不直接应用到相机上进行旋转变化。针对旋转矩阵中的每一个元素的值,按照如下公式进行修正:

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。根据矫正后得到的旋转矩阵将被真正用于旋转变化。本发明针对原始的陀螺仪数据采用低通滤波器进行预处理,降低了由于陀螺仪精度问题导致的旋转变换不平滑甚至不连贯的问题,也解决了陀螺仪精度不够导致视频抖动的问题。另外实现方案不依赖于具体的播放器,灵活度较高。

同时,本发明还公开了一种实现Android平台全景视频播放同时响应陀螺仪与手势拖拽交互的装置,包括,

建模模块,用以利用OpenGL ES在Android视频图像绘制的目标视图上建立一个球面模型,创建一个用于控制视角的相机并放置在球面模型的球心位置;

播放模块,用以对全景视频进行解码操作并生成视频纹理,然后将视频纹理附着在所述的球面模型的内表面,

旋转模块,同时监听手机的陀螺仪变化和手机屏幕上的手势拖拽操作,当获取到陀螺仪的原始数据并将它转换成旋转矩阵的形式,然后将旋转矩阵应用到放置于球心的相机上使其做同样的旋转变换,当监听获取到用户在屏幕上横向拖拽的距离和方向并控制球面模型绕相机自身坐标系的X轴或Y轴按拖拽的方向进行旋转;即,获取到用户在屏幕上横向拖拽的距离和方向,然后使得球面模型绕相机自身坐标系的Y轴按拖拽的方向进行旋转,旋转的角度大小与拖拽的距离相对应;获取到用户在屏幕上纵向拖拽的距离和方向,然后使得球面模型绕相机自身坐标系的X轴按拖拽的方向进行旋转,旋转的角度大小与拖拽的距离相对应。

渲染模块,用以在视角旋转同时利用图形库,如opengl进行模型和画面的渲染。

所述的旋转模块还包括低通滤波器,用以将陀螺仪旋转矩阵中的每一个数据项进行过滤以把过高的变化值滤掉,得以消除陀螺仪的抖动使得旋转变换更平滑更连贯。所述的低通过滤器的处理方法为,

R[n]=R[n-1]+a*(X[n]-R[n-1])

其中X[n]代表当前陀螺仪采集到的旋转矩阵中的某一元素值,R[n-1]代表上一次计算完后真正用于旋转变换的旋转矩阵中的某一元素值,R[n]代表矫正后的结果值,a是矫正因子。

本发明提供了一种在Android平台上实现同时响应陀螺仪与手势拖拽交互进行全景视频播放的装置,该装置适用于支持触屏操作且含有陀螺仪的智能手机。同时响应手机陀螺仪和手机屏幕上的拖拽手势实现了更灵活的交互方式。用户只需要通过手势将视角拖拽到指定方向即可,如果在观看过程中想随时变化视角也可以随时利用陀螺仪变化视角。两种方式同时作用,用户可以根据需要灵活操作。

以上所述仅是本发明的优选实施方式,应当指出的是,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1