本申请涉及虚拟现实技术领域,尤其涉及一种界面显示方法及装置。
背景技术:
虚拟现实(Virtual Reality,VR)是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真,它利用计算机生成一种模拟环境,使用户沉浸到该环境中。例如,用户通过佩戴虚拟现实头盔等虚拟现实设备来完成与虚拟现实系统的交互。
在虚拟现实设备上,现有的VR应用是通过在单屏或双屏上分别显示左右眼内容来实现展现内容的。因此,虚拟现实设备要求分别渲染出左眼画面和右眼画面来产生立体感,而现有的安卓应用并非为虚拟设备单独开发设计的,若简单地只是将普通应用的显示界面直接显示在屏幕上,会造成用户左右眼分别看到应用的左半部分与右半部分或者上半部分与下半部分,内容撑满整个视野会造成压迫与眩晕感。用户完全无法获得应用的内容,也无法与之交互。从而严重影响使用体验。
技术实现要素:
本申请实施例提供一种界面显示方法及其装置,用以解决非VR应用程序的界面无法在VR设备中正常显示的问题。
本申请实施例提供一种界面显示方法,该方法包括:
获取目标应用程序提交的应用程序标识;
若根据所述应用程序标识确定所述目标应用程序为非虚拟现实VR应用程序,则在左屏幕中构建左虚拟屏幕以及在右屏幕中构建右虚拟屏幕;
获取与所述目标应用程序的N个待显示界面对应的纹理,并将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上。
可选的,获取与所述目标应用程序的N个待显示界面对应的纹理,包括:
若所述N等于1,则将所述目标应用程序的1个待显示界面的界面内容制作为所述纹理;或者
若所述N大于1,则分别将所述N个待显示界面的界面内容按照显示顺序进行叠加后获得叠加后的界面内容,并将叠加后的界面内容制作为所述纹理。
可选的,分别将所述N个待显示界面的界面内容按照显示顺序进行叠加后获得叠加后的界面内容,包括:
按照所述N个待显示界面的显示顺序,分别将所述N个待显示界面绘制为一个显示界面,获得叠加后的界面内容。
可选的,所述将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上之前,还包括:
若确定只需要显示所述N个待显示界面,则在所述N个待显示界面之下设置一个全景背景图片。
可选的,将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上之后,还包括:
分别在左虚拟屏幕和右虚拟屏幕的四周添加至少一个控件。
本申请实施例提供一种界面显示装置,该装置包括:
获取单元,用于获取目标应用程序提交的应用程序标识;
处理单元,用于若根据所述应用程序标识确定所述目标应用程序为非虚拟现实VR应用程序,则在左屏幕中构建左虚拟屏幕以及在右屏幕中构建右虚拟屏幕;
显示单元,用于获取与所述目标应用程序的N个待显示界面对应的纹理,并将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上。
可选的,所述显示单元具体用于:
若所述N等于1,则将所述目标应用程序的1个待显示界面的界面内容制作为所述纹理;或者
若所述N大于1,则分别将所述N个待显示界面的界面内容按照显示顺序进行叠加后获得叠加后的界面内容,并将叠加后的界面内容制作为所述纹理。
可选的,所述显示单元具体用于:
按照所述N个待显示界面的显示顺序,分别将所述N个待显示界面绘制为一个显示界面,获得叠加后的界面内容。
可选的,所述显示单元还用于:
若确定只需要显示所述N个待显示界面,则在所述N个待显示界面之下设置一个全景背景图片。
可选的,所述处理单元还用于:
分别在左虚拟屏幕和右虚拟屏幕的四周添加至少一个控件。
根据本申请实施例提供的方法及装置,通过将非VR应用程序的N个待显示界面合成为一个纹理,然后将所述纹理分别绘制在左虚拟屏幕以及右虚拟屏幕上,从而实现在虚拟现实环境中,绘制出与左眼和右眼对应的画面,从而正确显示非VR应用程序的界面。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种界面显示方法流程示意图;
图2为本申请实施例提供的一种界面显示示意图;
图3为本申请实施例提供的一种界面显示示意图;
图4为本申请实施例提供的一种界面显示示意图;
图5为本申请实施例提供的一种界面显示示意图;
图6为本申请实施例提供的一种界面显示示意图;
图7为本申请实施例提供的一种界面显示装置结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部份实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
结合上面的描述,如图1所示,为本申请实施例提供的一种界面显示方法流程示意图。执行图1流程的终端为VR设备。
参见图1,该方法包括:
步骤101:获取目标应用程序提交的应用程序标识;
步骤102:若根据所述应用程序标识确定所述目标应用程序为非虚拟现实VR应用程序,则在左屏幕中构建左虚拟屏幕以及在右屏幕中构建右虚拟屏幕;
步骤103:获取与所述目标应用程序的N个待显示界面对应的纹理,并将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上。
现代操作系统的图形用户界面都有成熟的窗口管理模块进行统一管理,例如安卓系统的SurfaceFlinger或HWC(Hardware Composer)组件等。本申请实施例通过结合操作系统的窗口管理模块和VR场景重建技术来重建虚拟屏幕以正常显示普通应用。
步骤101中,终端中的目标应用程序在显示界面之前,需要向窗口管理模块申请缓冲区,然后将待显示界面写入缓冲区并提交给终端中的窗口管理模块。此时,终端中的窗口管理模块可以获取到目标应用程序提交的应用程序标识等信息,从而可以确定目标应用程序是否为VR应用程序。
需要说明的是,目标应用程序可以为任意一种应用程序,例如即时通讯类的应用程序、金融支付类的应用程序等。
步骤102中,根据所述应用程序标识确定所述目标应用程序为非VR应用程序之后,可以通过传感器等模块获得当前显示的界面的面向方向、角度等信息。然后根据当前显示的界面的面向方向、角度等信息确定一个正方向,通常为打开应用程序时的头控朝向。
同时,还可以根据待显示界面的显示模式确定虚拟屏幕(左虚拟屏幕或右虚拟屏幕,以下未特别说明时,虚拟屏幕指左虚拟屏幕或右虚拟屏幕)的显示模式。具体的,待显示界面为横屏模式,则虚拟屏幕为横屏模式;待显示界面为竖屏模式,则虚拟屏幕为竖屏模式。
在确定了正方向以及虚拟屏幕的显示模式之后,就可以以正方向为中心方向,在左屏幕中构建左虚拟屏幕以及在右屏幕中构建右虚拟屏幕。
需要说明的是,当确认虚拟屏幕正方向之后,正方向不再做出改变,即使配置该终端的用户的头部移动,此正方向不做改变。
本申请实施例中,可以先确定虚拟现实场景,然后将虚拟现实场景写入纹理缓存中,然后将纹理缓存中的数据绘制到终端的屏幕上,从而实现在左屏幕中构建左虚拟屏幕以及在右屏幕中构建右虚拟屏幕。
当然,也可以不用确定虚拟显示场景,直接在已经显示的VR应用程序的界面上分别构建左虚拟屏幕和右虚拟屏幕。举例来说,在全屏运行VR游戏程序时,需要弹出一个弹窗提示窗口用以提示用户目前终端处于低电量状态。此时,可以先绘制正在运行的VR游戏程序的显示内容,然后在正在运行的VR游戏程序的显示内容之上构建左虚拟屏幕和右虚拟屏幕,然后将需要显示的界面绘制到左虚拟屏幕和右虚拟屏幕上。
最后,在步骤103中,将与所述目标应用程序的N个待显示界面对应的纹理分别绘制到左虚拟屏幕和右虚拟屏幕上。其中,每个待显示界面可以为下拉菜单、悬浮窗、弹窗等界面,本申请实施例对此并不限定。
本申请实施例中,终端中的窗口管理模块可以按照每个应用程序向窗口管理模块注册的显示次序,逐层依次绘制每个应用程序的待显示界面。具体的,如果显示的第一层界面是非VR应用程序的界面或者半透明的VR应用程序的界面,则可以先绘制全景背景图片,接着在全景背景图片上开始绘制需要显示的界面。
如果需要显示非VR应用程序的待显示界面,绘制时需要将同时显示的至少一个待显示界面按照每个待显示界面的显示顺序进行叠加后获得叠加后的界面内容,然后将叠加后的界面内容制作为纹理,并将所述纹理分别绘制到左虚拟屏幕和右虚拟屏幕;如果需要显示VR应用程序的待显示界面,就直接绘制至屏幕并与屏幕现有内容叠加。特别的所有非VR应用程序对应的虚拟屏幕的形状大小和位置都是相同的,以保证相对位置的不变性。
对于非VR应用程序,如果只有1个待显示界面,则直接将所述目标应用程序的1个待显示界面的界面内容制作为所述纹理。
如果有多个待显示界面,即所述N大于1,则分别将所述N个待显示界面的界面内容按照显示顺序进行叠加后获得叠加后的界面内容,并将叠加后的界面内容制作为所述纹理。具体的,可以按照所述N个待显示界面的显示顺序,分别将所述N个待显示界面绘制为一个显示界面,获得叠加后的界面内容。
举例来说,如图2所示,为本申请实施例提供的一种界面显示示意图。图2中,目标应用程序需要同时显示3个待显示界面,分别为201、202以及203。它们按照显示顺序叠加后的界面内容如图2所示,此时终端可以将201、202以及203按照显示顺序叠加后的界面内容制作为纹理。
举例来说,在实际实现过程中,可以通过OpenGL中相应的函数创建一个纹理对象,用于保存绘制的纹理,然后按照所述N个待显示界面的显示顺序,通过OpenGL的合成方式将每个待显示界面绘制到纹理对象中。在显示时,从纹理对象中读取纹理,并通过OpenGL中相应的函数将读取到的纹理绘制到左虚拟屏幕和右虚拟屏幕上。当然以上只是示例,还可以通过其他方式实现,在此不再赘述。
可选的,本申请实施例中,若确定所述目标应用程序的N个待显示界面与另一个非VR应用程序的M个待显示界面同时显示,且所述M个待显示界面与所述N个待显示界面相邻,则分别将所述N个待显示界面以及所述M个待显示界面的界面内容按照显示顺序进行叠加后获得叠加后的界面内容,并将叠加后的界面内容制作为纹理。
本申请实施例中,在将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上之前,若确定只需要显示所述N个待显示界面,或者确定与所述N个待显示界面同时显示的界面对应的应用程序均为非VR应用程序,则可以在所有界面之下设置一个全景背景图片。
进一步的,本申请实施例中,还可以分别在左虚拟屏幕和右虚拟屏幕的四周添加至少一个控件。例如,可以显示电量、时间、Wi-Fi连接状态的控件。再例如,可以添加放大或缩小虚拟屏幕中显示内容的控件、旋转虚拟屏幕中显示内容的控件。当然以上只是示例,还可以添加其他控件,在此不再逐一举例说明。
需要说明的是,添加的控件的位置可以为虚拟屏幕的上方或下方,具体可以根据实际情况确定。
可选的,本申请实施例中,还可以在虚拟屏幕中显示当前头控光标,可以通过所述头控光标去触发虚拟屏幕四周的控件,完成相应的动作。例如放大或缩小虚拟屏幕中显示内容、旋转虚拟屏幕中显示内容等操作。
结合前面的描述,下面通过具体的实施例描述前面的过程。
步骤一、目标应用程序申请缓冲区,并在缓冲区中绘制待显示界面。
举例来说,目标应用程序绘制的待显示界面如图3所示。如果该待显示界面显示在VR设备中,会铺满整个VR设备的屏幕,具体的,如图4所示。此时,用户的左眼和右眼只能看到部分界面,导致用户感受很差。
步骤二、获取目标应用程序的应用程序标识,若根据应用程序标识确定目标应用程序为非VR应用程序,则构建左虚拟屏幕以及右虚拟屏幕,并转至步骤三;否则直接按照显示VR应用程序界面的流程执行显示界面的过程。
步骤二中,在构建左虚拟屏幕以及右虚拟屏幕之前,可以先通过VR设备中的传感器确定正方向,以及确定左虚拟屏幕以及右虚拟屏幕的显示模式(横屏模式或者竖屏模式)。
步骤三、获取与所述待显示界面对应的纹理,并将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上。
本申请实施例中,可以通过OpenGL中相应的函数将读取到的纹理绘制到左虚拟屏幕和右虚拟屏幕上。具体的,结合图3,最后显示的界面可以如图5所示。
进一步的,本申请实施例中,还可以分别在左虚拟屏幕和右虚拟屏幕的四周添加显示电量的控件、Wi-Fi连接状态的控件、放大或缩小虚拟屏幕中显示内容的控件、旋转虚拟屏幕中显示内容的控件。具体的,结合图5,最后显示的界面可以如图6所示。
基于相同的技术构思,本申请实施例还提供一种界面显示装置,该装置可执行上述方法实施例。
参见图7,为本申请实施例提供的一种界面显示装置结构示意图。该装置包括:
获取单元701,用于获取目标应用程序提交的应用程序标识;
处理单元702,用于若根据所述应用程序标识确定所述目标应用程序为非虚拟现实VR应用程序,则在左屏幕中构建左虚拟屏幕以及在右屏幕中构建右虚拟屏幕;
显示单元703,用于获取与所述目标应用程序的N个待显示界面对应的纹理,并将所述纹理分别绘制在所述左虚拟屏幕和所述右虚拟屏幕上。
可选的,所述显示单元703具体用于:
若所述N等于1,则将所述目标应用程序的1个待显示界面的界面内容制作为所述纹理;或者
若所述N大于1,则分别将所述N个待显示界面的界面内容按照显示顺序进行叠加后获得叠加后的界面内容,并将叠加后的界面内容制作为所述纹理。
可选的,所述显示单元703具体用于:
按照所述N个待显示界面的显示顺序,分别将所述N个待显示界面绘制为一个显示界面,获得叠加后的界面内容。
可选的,所述显示单元703还用于:
若确定只需要显示所述N个待显示界面,则在所述N个待显示界面之下设置一个全景背景图片。
可选的,所述处理单元702还用于:
分别在左虚拟屏幕和右虚拟屏幕的四周添加至少一个控件。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求的范围之内,则本申请也意图包含这些改动和变型在内。