用于虚拟和现实场景的立体显示方法、装置及电子设备转让专利

申请号 : CN201510546495.2

文献号 : CN105704478B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘江

申请人 : 深圳超多维光电子有限公司

摘要 :

本发明提供一种用于虚拟和现实场景的立体显示方法、装置及电子设备,其显示方法包括:获取应用程序的标识信息;根据标识信息,确定应用程序对应的观察视角同步模式;根据观察视角同步模式,在应用程序的用户的头部位置发生变化时,构建并显示应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与用户头部位置变化后的观察视角同步。本发明实施例能够针对不同程序提供不同的观察视角同步方式,提升用户对立体内容的体验。本发明实施例可应用于3D显示设备中。

权利要求 :

1.一种用于虚拟和现实场景的立体显示方法,其特征在于,包括:

获取应用程序的标识信息;

根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;

根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步,其中,所述观察视角同步模式包括以下模式中的至少一种:观察矩阵变换模式、投影矩阵变换模式和鼠标变换模式;

在所述观察矩阵变换模式下:

跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像;

或者

跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像;

在所述投影矩阵变换模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像;

在所述鼠标变换模式下,跟踪所述应用程序的用户的头部位置,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量;根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述虚拟鼠标的位置信息生成并显示虚拟场景的立体图像。

2.根据权利要求1所述的立体显示方法,其特征在于,所述应用程序的标识信息包括所述应用程序对应的哈希Hash值或者所述应用程序的安装包名称。

3.根据权利要求1所述的立体显示方法,其特征在于,所述根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式的步骤包括:根据所述获取的标识信息和预先设置的应用程序标识信息与观察视角同步模式的对应关系,确定所述应用程序对应的观察视角同步模式;

或者

根据所述获取的标识信息,确定所述应用程序的显示场景类型;

根据所述确定的显示场景类型,确定所述应用程序对应的观察视角同步模式。

4.根据权利要求1所述的立体显示方法,其特征在于,

在所述观察矩阵变换模式、投影矩阵变换模式或鼠标变换模式下,首先对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据,然后利用所述平滑滤波处理后的实时跟踪数据进行后续处理。

5.根据权利要求1所述的立体显示方法,其特征在于,

在所述观察矩阵变换模式下,根据所述实时跟踪数据,确定用户头部的旋转矩阵,根据所述用户头部的旋转矩阵、虚拟场景的视差偏转矩阵以及所述虚拟场景的观察矩阵,确定新的观察矩阵。

6.根据权利要求5所述的立体显示方法,其特征在于,在所述观察矩阵变换模式下,根据预先配置或者根据用户输入的设置参数确定虚拟场景的视间距信息,根据所述确定的视间距信息确定虚拟场景的视差偏转矩阵。

7.根据权利要求5所述的立体显示方法,其特征在于,在所述观察矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的观察矩阵,对所述原渲染管线进行修改,从而实现利用所述新的观察矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。

8.根据权利要求1所述的立体显示方法,其特征在于,在所述投影矩阵变换模式下,根据所述实时跟踪数据,确定虚拟场景的立体图像的投影位置偏移信息,根据所述确定的投影位置偏移信息和所述虚拟场景的投影矩阵,构建新的投影矩阵。

9.根据权利要求8所述的立体显示方法,其特征在于,在所述投影矩阵变换模式下,根据所述用户头部的实时跟踪数据和所述原投影矩阵的视点距近投影平面的距离,确定所述投影位置偏移信息。

10.根据权利要求8所述的立体显示方法,其特征在于,在所述投影矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的投影矩阵对所述原渲染管线进行修改,从而实现利用所述新的投影矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。

11.根据权利要求1所述的立体显示方法,其特征在于,在所述鼠标变换模式下,根据所述头部位置的实时跟踪数据,确定所述用户头部的实时转动角度,根据所述用户头部的实时转动角度,确定用于虚拟场景的模拟鼠标的移动量。

12.根据权利要求11所述的立体显示方法,其特征在于,在所述鼠标变换模式下,获取用户头部的当前帧的跟踪数据和该用户头部前一帧的跟踪数据,获取当前帧的跟踪数据和前一帧的跟踪数据的差值,并由所述差值确定所述实时转动角度。

13.一种用于虚拟和现实场景的立体显示装置,其特征在于,包括:

获取模块,用于获取应用程序的标识信息;

确定模块,用于根据所述获取的标识信息,确定所述应用程序对应的能够在用户改变头部的位置从而改变眼睛的观察视角时,用户所观看的虚拟场景的观察视角随之变化的观察视角同步模式;

显示模块,用于根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步,其中,所述观察视角同步模式包括以下模式中的至少一种:观察矩阵变换模式、投影矩阵变换模式和鼠标变换模式;

所述显示模块包括观察矩阵变换模块及/或投影矩阵变换模块及/或鼠标变换模块;

所述观察矩阵变换模块用于在所述观察矩阵变换模式下跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像;

或者

跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像;

所述投影矩阵变换模块用于在所述投影矩阵变换模式下跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像;

所述鼠标变换模块用于在所述鼠标变换模式下跟踪所述应用程序的用户的头部位置,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量;根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述虚拟鼠标的位置信息生成并显示虚拟场景的立体图像。

14.一种用于虚拟和现实场景的电子设备,其特征在于,包括:

壳体、处理器、存储器、显示器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:获取应用程序的标识信息;

根据所述获取的标识信息,确定所述应用程序对应的能够在用户改变头部的位置从而改变眼睛的观察视角时,用户所观看的虚拟场景的观察视角随之变化的观察视角同步模式;

根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步,其中,所述观察视角同步模式包括以下模式中的至少一种:观察矩阵变换模式、投影矩阵变换模式和鼠标变换模式;

在所述观察矩阵变换模式下:

跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像;

或者

跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像;

在所述投影矩阵变换模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像;

在所述鼠标变换模式下,跟踪所述应用程序的用户的头部位置,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量;根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述虚拟鼠标的位置信息生成并显示虚拟场景的立体图像。

说明书 :

用于虚拟和现实场景的立体显示方法、装置及电子设备

技术领域

[0001] 本发明涉及虚拟现实技术领域,特别涉及一种用于虚拟和现实场景的立体显示方法、装置及电子设备。

背景技术

[0002] 虚拟与现实简称VR(Virtual Reality),意指通过技术手段创造出一种逼真的虚拟的现实效果。目前,虚拟与现实设备已经逐渐成熟和完善,现已广泛应用在影视和游戏等领域,越来越多的用户开始选择虚拟与现实设备来体验3D(3维,3Dimensions)立体内容。
[0003] 在用户通过虚拟与现实设备来体验3D立体内容时,为了让用户体验到非常逼真的现实效果,同步观察视角就变得非常重要,即,在用户改变头部的位置从而改变眼睛的观察视角时,用户所观看的3D立体内容的观察方位即虚拟场景的观察视角要随之变化,从而带给用户强烈的代入感和现实感。
[0004] 现有技术中,大多数虚拟与现实设备在同步观察视角的方法上单一没有选择性,这样势必会对整个3D立体内容的体验造成影响。

发明内容

[0005] 本发明的目的在于提供一种用于虚拟和现实场景的立体显示方法及装置,能够针对不同程序提供不同的观察视角同步方式,有效提升用户体验。
[0006] 为了达到上述目的,本发明实施例提供一种用于虚拟和现实场景的立体显示方法,包括:
[0007] 获取应用程序的标识信息;
[0008] 根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;
[0009] 根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步。
[0010] 其中,所述观察视角同步模式包括以下模式中的至少一种:观察矩阵变换模式、投影矩阵变换模式和鼠标变换模式;
[0011] 在所述观察矩阵变换模式下:
[0012] 跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像;或者
[0013] 跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像;
[0014] 在所述投影矩阵变换模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像;
[0015] 在所述鼠标变换模式下,跟踪所述应用程序的用户的头部位置,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量;根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述虚拟鼠标的位置信息生成并显示虚拟场景的立体图像。
[0016] 其中,所述应用程序的标识信息包括所述应用程序对应的哈希Hash值或者所述应用程序的安装包名称。
[0017] 其中,所述根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式的步骤包括:
[0018] 根据所述获取的标识信息和预先设置的应用程序标识信息与观察视角同步模式的对应关系,确定所述应用程序对应的观察视角同步模式;
[0019] 或者
[0020] 根据所述获取的标识信息,确定所述应用程序的显示场景类型;
[0021] 根据所述确定的显示场景类型,确定所述应用程序对应的观察视角同步模式。
[0022] 其中,在所述观察矩阵变换模式、投影矩阵变换模式或鼠标变换模式下,首先对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据,然后利用所述平滑滤波处理后的实时跟踪数据进行后续处理。
[0023] 其中,在所述观察矩阵变换模式下,根据所述实时跟踪数据,确定用户头部的旋转矩阵,根据所述用户头部的旋转矩阵、虚拟场景的视差偏转矩阵以及所述虚拟场景的观察矩阵,确定新的观察矩阵。
[0024] 其中,在所述观察矩阵变换模式下,根据预先配置或者根据用户输入的设置参数确定虚拟场景的视间距信息,根据所述确定的视间距信息确定虚拟场景的视差偏转矩阵。
[0025] 其中,在所述观察矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的观察矩阵,对所述原渲染管线进行修改,从而实现利用所述新的观察矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。
[0026] 其中,在所述投影矩阵变换模式下,根据所述实时跟踪数据,确定虚拟场景的立体图像的投影位置偏移信息,根据所述确定的投影位置偏移信息和所述虚拟场景的投影矩阵,构建新的投影矩阵。
[0027] 其中,在所述投影矩阵变换模式下,根据所述用户头部的实时跟踪数据和所述原投影矩阵的视点距近投影平面的距离,确定所述投影位置偏移信息。
[0028] 其中,在所述投影矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的投影矩阵对所述原渲染管线进行修改,从而实现利用所述新的投影矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。
[0029] 其中,在所述鼠标变换模式下,根据所述头部位置的实时跟踪数据,确定所述用户头部的实时转动角度,根据所述用户头部的实时转动角度,确定用于虚拟场景的模拟鼠标的移动量。
[0030] 其中,在所述鼠标变换模式下,获取用户头部的当前帧的跟踪数据和该用户头部前一帧的跟踪数据,获取当前帧的跟踪数据和前一帧的跟踪数据的差值,并由所述差值确定所述实时转动角度。
[0031] 本发明实施例还提供一种用于虚拟和现实场景的立体显示装置,包括:
[0032] 获取模块,用于获取应用程序的标识信息;
[0033] 确定模块,用于根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;
[0034] 显示模块,用于根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步。
[0035] 本发明实施例还提供一种用于虚拟和现实场景的电子设备,包括:
[0036] 壳体、处理器、存储器、显示器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:
[0037] 获取应用程序的标识信息;
[0038] 根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;
[0039] 根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步。
[0040] 本发明的上述技术方案至少具有如下有益效果:
[0041] 本发明实施例的用于虚拟和现实场景的立体显示方法及装置,为应用程序提供技术支持,通过获取应用程序的标识来确定该应用程序支持或需使用的观察视角同步模式,并进一步在用户的头部位置发生变化时利用确定的观察视角同步模式构建并显示应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步,能够针对不同的应用程序提供不同的观察视角同步方式,能够为应用程序提供适合该应用程序的虚拟场景的观察视角同步方式,因此能够有效提升用户体验。

附图说明

[0042] 图1表示本发明实施例一提供的用于虚拟和现实场景的立体显示方法的流程图;
[0043] 图2表示本发明提供的用于虚拟和现实场景的立体显示方法中用户头部跟踪数据的示意图;
[0044] 图3表示本发明实施例三提供的用于虚拟和现实场景的立体显示方法中投影示意图;
[0045] 图4表示本发明实施例五提供的用于虚拟和现实场景的立体显示装置的组成结构示意图。

具体实施方式

[0046] 为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
[0047] 本发明针对现有技术中同步观察视角的方式上单一没有选择性,用户体验较差的问题,提供一种用于虚拟和现实场景的立体显示方法及装置,为应用程序提供技术支持和解决方案,通过获取应用程序的标识来确定该应用程序支持或需使用的观察视角同步模式,并进一步在用户的头部位置发生变化时利用确定的观察视角同步模式构建并显示应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步,能够针对不同的应用程序提供不同的观察视角同步方式,能够为应用程序提供适合该应用程序的虚拟场景的观察视角同步方式,有效保证虚拟场景的显示效果,因此能够有效提升用户体验。
[0048] 需要说明的是,本发明实施例可以应用在穿戴式的3D显示场景,还可以应用在裸眼3D显示场景,本发明对此不做限定。
[0049] 如图1所示,本发明的具体实施例一提供用于虚拟和现实场景的立体显示方法,包括:
[0050] 步骤11,获取应用程序的标识信息;
[0051] 其中,应用程序可以为各类3D游戏。当然,本发明不限于此,还可以是需要进行虚拟场景的3D显示的其他任意应用程序,本领域技术人员可以任意选择。
[0052] 步骤12,根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;
[0053] 步骤13,根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步。
[0054] 本发明实施例提供的用于虚拟和现实场景的立体显示方法,能够根据应用程序的标识信息为应用程序选择恰当的观察视角同步模式来实现观察视角的同步,即在使用该应用程序的用户的头部位置发生变化时,利用上述确定的观察视角同步模式来构建并显示该应用程序的虚拟场景的立体图像。由于本发明实施例提供的立体显示方法先确定应用程序的观察视角同步模式,且能够与应用程序相匹配,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与用户头部位置变化后的观察视角的同步。因此,能够针对不同的应用程序提供不同的观察视角同步方式,能够为应用程序提供适合该应用程序的虚拟场景的观察视角同步方式,有效保证虚拟场景的显示效果,因此能够有效提升用户体验。
[0055] 具体的,本发明的上述实施例中,应用程序的标识信息包括所述应用程序对应的哈希Hash值或者所述应用程序的安装包名称。
[0056] 当然,只要是能够唯一确定该应用程序的标识信息均适用于本发明,在此不一一举例。
[0057] 进一步的,本发明的上述实施例中,确定应用程序对应的观察视角同步模式的方式可以包括两种,其中第一种方式步骤12具体包括:
[0058] 根据所述获取的标识信息和预先设置的应用程序标识信息与观察视角同步模式的对应关系,确定所述应用程序对应的观察视角同步模式;
[0059] 该种方式下,技术人员预先在后台或本地预设数据库,数据库中存储应用程序的标识信息与观察视角同步模式的对应关系,即预先确定好各应用程序所适用的观察视角同步模式,在获取标识信息后直接从数据库中查找对应关系则能够确定与该应用程序对应的观察视角同步模式。
[0060] 第二种方式步骤12具体包括:
[0061] 根据所述获取的标识信息,确定所述应用程序的显示场景类型;
[0062] 根据所述确定的显示场景类型,确定所述应用程序对应的观察视角同步模式。
[0063] 该种方式下,预先确定各应用程序的显示场景类型,即为各应用程序归类,不同显示场景类型的应用程序对应不同的观察视角同步模式,因此,先根据标识信息确定应用程序的显示场景类型,之后再根据显示场景类型来确定观察视角同步模式,其中显示场景类型与观察视角同步模式具有对应关系。
[0064] 举例说明,应用程序的显示场景类型可包括支持鼠标转动视角的第一类型、在视角转动后显示场景未缺失的第二类型(例如头戴式3D显示)和在视角转动后显示场景可能缺失的第三类型(例如裸眼3D显示)等,因此,就可以根据应用程序的不同的类型为应用程序选择不同的观察视角同步模式。
[0065] 可以理解的是,本发明实施例对如何根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式不做限定,任何合理和可行的方案均可以应用其中,本领域技术人员可以进行任意设置。
[0066] 具体的,本发明的上述实施例中,所述观察视角同步模式包括以下模式中的至少一种:观察矩阵变换模式、投影矩阵变换模式和鼠标变换模式;
[0067] 其中,在所述观察矩阵变换模式下:
[0068] 跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像;
[0069] 或者
[0070] 跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像;
[0071] 在所述投影矩阵变换模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像;
[0072] 在所述鼠标变换模式下,跟踪所述应用程序的用户的头部位置,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量;根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述虚拟鼠标的位置信息生成并显示虚拟场景的立体图像。
[0073] 本发明实施例所提供的三种观察视角同步模式,在用户头部位置发生变化时,利用用户头部位置的实时跟踪数据对虚拟场景的观察矩阵(或变换矩阵)、投影矩阵或虚拟鼠标的位置信息进行变换或修改,从而利用修改后的观察矩阵(或变换矩阵)、投影矩阵或虚拟鼠标的位置信息构建虚拟场景的立体图像,进而可以在一定程度上减轻用户在使用虚拟与现实设备时在同步观察视角时所产生的不适感。此外,本发明实施例所提供了三种不同观察视角同步模式,来实现虚拟场景下的观察视角与现实用户头部位置变化后的观察视角的同步,可以针对不同的显示场景使用,因此应用范围非常广泛。
[0074] 在三种模式下,本发明的实施例中假设虚拟场景中和真实场景中用户的头部位置的观察转动角度是相同的,并且位置的偏移在结合标尺(Scale)后也是相同的。结合上面的假设,本发明的实施例中所提供的三种观察视角同步模式,根据真实场景中用户头部位置的跟踪数据,变换虚拟场景中观察的方位,即同步观察视角。
[0075] 下面分别对三种观察视角同步模式进行详细描述:
[0076] 具体实施例二
[0077] 本实施例中,观察视角同步模式包括观察矩阵变换模式或投影矩阵变换模式。当确定应用程序对应的观察视角同步模式为观察矩阵变换模式后,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像。
[0078] 当确定应用程序对应的观察视角同步模式为投影矩阵变换模式后,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像。
[0079] 可选的,如果用户是穿戴式的方式观看3D内容,可通过速度传感器或者加速度传感器等传感器件跟踪用户的头部位置从而获取用户头部位置的实时跟踪数据,如果是裸眼3D场景,可通过摄像头跟踪用户的头部位置从而获取用户头部位置的实时跟踪数据,本领域技术人员可以任意选择。
[0080] 具体的,用户头部位置的实时跟踪数据可以包括头部在三维空间中的实时转动角度,可通过预先建立一三维坐标系,从而获取用户头部相对于X轴的旋转角度、相对于Y轴的旋转角度以及相对于Z轴的旋转角度来共同表示用户头部的实时转动角度。当然,用户头部位置的实时跟踪数据还可包括头部在三维空间的实时平移距离,与实时转动角度类似,在此不做详述。
[0081] 举例说明,如图2所示,用户头部的实时跟踪数据包括头部在三维空间中的转动角度(Pitch,Yaw,Roll);其中,Pitch:用户头部相对于x轴的转动角度;Yaw:用户头部相对于y轴的转动角度;Roll:用户头部相对于z轴的转动角度。
[0082] 从原理上来讲,变换原观察矩阵的方式是保持观察场景和物体不动,而改变摄像机(代表用户的眼睛)的观察位置和角度来实现观察视角同步的方式,而变换原投影矩阵的方式是保持摄像机的位置不动,而改变视景体位置来实现观察视角同步的方式。
[0083] 在这两种模式下,具体的,根据用户头部位置发生变化时所获取的实时跟踪数据,对虚拟场景的原观察矩阵或原投影矩阵进行变换,该实时跟踪数据可以表征用户头部位置的变化。
[0084] 需要强调的是,本发明实施例中所述的观察矩阵或投影矩阵,是图形图像处理领域的常规概念,本领域技术人员可以直接毫无疑义的确定,本发明对此不做详述。
[0085] 本实施例的用于虚拟和现实场景的立体显示方法,通过跟踪用户的头部位置,在用户头部位置发生变化时,利用用户头部位置的实时跟踪数据对虚拟场景的观察矩阵或投影矩阵进行变换,利用变换或修改后的观察矩阵、投影矩阵构建虚拟场景的立体图像,从而实现虚拟场景的观察视角与用户头部位置变化后的观察视角的同步,能够在一定程度上减轻用户在使用虚拟与现实设备时在同步观察视角时所产生的不适感。
[0086] 较佳的,为了避免头部位置数据的突然波动而造成观察视角的突变,进而使得用户产生眩晕感,本发明的具体实施例中在所述根据所述实时跟踪数据,对虚拟场景的原观察矩阵或原投影矩阵进行变换前,对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据,根据所述平滑滤波处理后的实时跟踪数据,对虚拟场景的原观察矩阵或原投影矩阵进行变换。这样,可以在后续构建并显示立体图像从而改变观察视角时,能够在一定程度上减弱用户的不适感,提升用户体验。
[0087] 具体实施例三:
[0088] 本实施例中,观察视角同步模式包括观察矩阵变换模式,当确定应用程序对应的观察视角同步模式为观察矩阵变换模式后,本实施例包括:
[0089] 步骤31,跟踪用户的头部位置,获取用户头部位置的实时跟踪数据。
[0090] 具体的,如图2所示,用户头部的实时跟踪数据与前述实施例中的实时跟踪数据一致,在此不重复描述。本实施例中根据实时跟踪数据,改变观察矩阵,从而得到新观察矩阵。
[0091] 步骤32,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵。
[0092] 本实施例中通过改变观察矩阵来进行视角偏转,从而实现观察视角的同步。其中,原观察矩阵也可称为当前观察矩阵,是指在用户头部位置变化时当前的立体图像所应用的观察矩阵,即观察视角还没改变时立体图像所应用的观察矩阵。在本发明的一个实施例中,虚拟场景的原观察矩阵可通过拦截技术获取,关于立体应用场景中的拦截技术不是本申请的重要内容,在此不详细描述。
[0093] 步骤33,根据所述新的观察矩阵,构建并显示虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与用户头部位置变化后的观察视角同步。
[0094] 具体的,在本发明的一个实施例中,得到新观察矩阵后,通过注入技术将新的观察矩阵注入到应用程序的成像流程中,从而达到绘制3D立体内容且实现观察视角同步的目的。
[0095] 本实施例提供的用于虚拟与显示场景的立体显示方法中,观察视角同步模式为观察矩阵同步模式,通过改变观察矩阵进行偏转视角的方法适用于在视角转动后,仍然能够正确的观察,没有场景信息缺失的场景下(例如头戴式3D显示)。该方式改变视角更加科学和准确,特别适用于立体内容即立体图像的场景范围较小的情况。
[0096] 具体的,本实施例中上述步骤32包括:
[0097] 步骤321,根据所述实时跟踪数据,确定用户头部的旋转矩阵;
[0098] 具体的,基于用户头部位置的实时跟踪数据,例如用户头部的旋转角度,确定用户头部的旋转矩阵分别为X轴的旋转矩阵、Y轴的旋转矩阵以及Z轴的旋转矩阵。需要说明的是,该类旋转矩阵的格式均为预先设定的,本发明中将得到的用户头部的实时跟踪数据进行预定处理后填充到预先设定的矩阵中的预定位置从而构成本实施例需要的用户头部的旋转矩阵。
[0099] 步骤322,根据所述用户头部的旋转矩阵、虚拟场景的视差偏转矩阵以及虚拟场景的原观察矩阵,确定新的观察矩阵。
[0100] 从立体成像的原理上来讲,为了构建立体图像,需要首先构建具有水平视差的两幅左右眼图像,为生成视差图像,需移动摄像机位置,即将摄像机在同一水平面上进行偏移,产生左右相机,分别对应人的左眼和右眼。左右相机之间的间距称为视间距。视差偏转矩阵根据视间距确定。
[0101] 用户头部的旋转矩阵实际为用户的视角偏转矩阵,即观察矩阵的变换包括视角偏转和视差偏转;从而根据视角偏转矩阵、虚拟场景的视差偏转矩阵以及当前虚拟场景的观察矩阵即可得到新的观察矩阵。且新的观察矩阵是相对于新的观察视角而言的。
[0102] 具体的,本发明提供的实施例四中的上述虚拟场景的视差偏转矩阵的生成步骤包括:
[0103] 步骤323,根据预先配置或者根据用户输入的设置参数确定虚拟场景的视间距信息;
[0104] 步骤324,根据所述确定的视间距信息确定虚拟场景的视差偏转矩阵。
[0105] 可选的,视间距信息sep可以由系统预先设定也可开放给用户自行设定,在此不限定其具体值。其中,sep可认为是左右相机之间的距离,用来表示人的左右眼之间的距离。需要说明的是,上述视差偏差矩阵也为预先设定的格式,本申请需将视间距信息进行预定处理后填充至预先设定的格式中从而构成视差偏转矩阵。
[0106] 进一步具体的,本实施例中,所述视差偏转矩阵包括第一视图视差偏转矩阵以及第二视图视差偏转矩阵,也可称为左视图视差偏转矩阵和右视图视差偏转矩阵;所述新的观察矩阵包括第一视图观察矩阵和第二视图观察矩阵,也可称为左视图观察矩阵和右视图观察矩阵;则步骤322具体包括:
[0107] 步骤3221,根据所述用户头部的旋转矩阵、虚拟场景的第一视图视差偏转矩阵以及虚拟场景的原观察矩阵,确定第一视图观察矩阵;以及
[0108] 步骤3222,根据所述用户头部的旋转矩阵、虚拟场景的第二视图视差偏转矩阵以及虚拟场景的原观察矩阵,确定第二视图观察矩阵;
[0109] 则,本实施例中上述步骤43包括:
[0110] 步骤331,利用所述第一视图观察矩阵渲染生成虚拟场景的第一视图,并利用所述第二视图观察矩阵渲染生成虚拟场景的第二视图;
[0111] 即,分别生成左右眼视差图像。
[0112] 步骤332,根据渲染生成的所述第一视图和第二视图,构建并显示虚拟场景的立体图像。
[0113] 即,拦截所述应用程序的原渲染管线,根据所述新的观察矩阵,对所述原渲染管线进行修改,从而实现利用所述新的观察矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。
[0114] 具体的,在本发明的一个实施例中,得到新观察矩阵后,利用注入技术将新观察矩阵注入到3D应用的流程中,从而达到绘制3D立体内容且实现观察视角同步的目的。
[0115] 具体的,本实施例得到两个新的观察矩阵,则需将两个新的观察矩阵分别注入到应用流程中,从而实现观察视角的同步;即分别根据第一视图观察矩阵和第二视图观察矩阵渲染生成第一视图和第二视图,根据第一视图和第二视图并结合立体显示技术,生成虚拟场景的立体图像并在裸眼立体显示屏上进行显示。
[0116] 具体的,下面结合一具体实施例对本实施例的执行步骤进行详细描述:
[0117] 首先通过拦截技术,获取当前虚拟场景的原观察矩阵V;
[0118] 然后根据头部跟踪数据Pitch,Yaw,Roll,则可以得到头部分别关于x,y,z轴的旋转矩阵:
[0119]
[0120]
[0121]
[0122] 进而可以得到用户头部的旋转矩阵VRotation:
[0123] VRotation=RotationPitch*RotationYaw*RotationRoll
[0124] 当然,在很多场景(例如第一人称射击游戏)中,我们只关注头部关于x轴和y轴的旋转变换,这样只需要令关于z轴旋转矩阵为单位矩阵:
[0125] RotationRoll=E
[0126] 进一步的,观察矩阵的变换包含:视差偏转变换矩阵Vsep和视角偏转变换矩阵(即用户头部的旋转矩阵)VRotation,其中视差偏转矩阵Vsep是指可以理解为在生成视差图像时,需对摄像机分别进行偏移±sep/2(即向第一方向移动sep/2得到左摄像机,向第二方向移动sep/2得到右摄像机),则左右摄像机的视差偏转矩阵分别为:
[0127]
[0128]
[0129] 既有视差偏转变换Vsep为:
[0130]
[0131] 则变换后的观察矩阵V′
[0132] V′=VRotation*Vsep*V
[0133] 具体的,变换后第一视图观察矩阵V′=VRotation*Vsep_R*V;相应的,变换后第二视图观察矩阵V′=VRotation*Vsep_L*V。将两个V′分别注入应用程序中,使得利用变换后的观察矩阵生成虚拟场景的立体图像,从而达到偏转视角的目的,实现观察视角的同步。
[0134] 具体实施例四:
[0135] 本实施例中,观察视角同步模式包括观察矩阵变换模式。当确定应用程序对应的观察视角同步模式为观察矩阵变换模式后,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像。
[0136] 在很多情况下(例如OpenGL1.0)通过拦截技术,只能获取到当前的整体变换矩阵(是将世界坐标变换、观察坐标变换以及投影变换相乘得到的结果),这样我们就不能直接对世界坐标变换、观察坐标变换以及投影变换中的单个变换进行直接修改。
[0137] 已知,原变换矩阵为M=P*V*W,其中W为世界坐标变换,V为观察坐标变换,P为投影变换。偏图的整个过程,需要对观察坐标变换V,以及投影矩阵P进行修改。有[0138] M′=P′*V′*W
[0139] 其中有V‘为改变后的观察坐标变换,P’为改变后的投影坐标变换:
[0140] V′=VRotation*Vsep*V
[0141] 其中,VRotation为视角偏转矩阵,Vsep为视差偏转矩阵。
[0142] 接着有,
[0143] M′=P′*VRotation*Vsep*V*W
[0144] =(P’*VRotation*Vsep*P-1)*P*V*W
[0145] =(P’*Vsep*Vrotation*P-1)*M
[0146] 其中,若不在该矩阵变换中偏转视角,则Vrotation=E,为单位矩阵。
[0147] 则
[0148] ML=(PL*Vsep_L*Vrotation*P-1)*M
[0149] MR=(PR*Vsep_R*Vrotation*P-1)*M
[0150] 其中,ML和MR分别为偏转后左右相机的变换矩阵,Vsep_L和Vsep_R分别为左右相机的视差偏转矩阵,PL和PR分别为偏转后左右相机的投影矩阵。在已知投影矩阵的且可以拦截到变换矩阵的M的前提下,就可以通过根据视差偏转矩阵和头部的旋转矩阵,得到变换后的变换矩阵。
[0151] 基于上述原理,本实施例中,在观察矩阵同步模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像。
[0152] 具体的,根据所述实时跟踪数据,确定用户头部的旋转矩阵Vrotation,利用Vrotation、视差偏转矩阵Vsep,和已知的投影矩阵P和它的逆矩阵P-1,得到新的变换矩阵,进而利用新的变换矩阵构建立体图像。
[0153] ML=(PL*Vsep_L*Vrotation*P-1)*M
[0154] MR=(PR*Vsep_R*Vrotation*P-1)*M
[0155] 可以理解的是,上述实施例中使用旋转矩阵进行示例说明,但是本发明不限于此,也可以根据用户头部进行平移时,构建用户头部的平移矩阵,进而利用用户头部的平移矩阵得到新的变换矩阵。本实施例中,旋转矩阵和平移矩阵均可称为位移矩阵。
[0156] 关于如何得到头部的旋转矩阵,视差偏转矩阵等均与前述实施例相同,这里不再详述。
[0157] 具体实施例五:
[0158] 本实施例中,观察视角同步模式包括投影矩阵变换模式。当确定应用程序对应的观察视角同步模式为投影矩阵变换模式后,本实施例的立体显示方法,包括:
[0159] 步骤51,跟踪用户的头部位置,获取用户头部位置的实时跟踪数据;
[0160] 具体的,如图2所示,该实施例中所指的用户头部的实时跟踪数据与前述实施例所指的用户头部的实时跟踪数据一致,在此不重复描述。
[0161] 步骤52,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵;
[0162] 其中,原投影矩阵也可称为当前投影矩阵,是指在用户头部位置变化时当前的立体图像所应用的投影矩阵,即观察视角还没改变时立体图像所应用的投影矩阵。
[0163] 步骤53,根据所述新的投影矩阵,构建并显示虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与现实用户头部位置变化后的观察视角同步。
[0164] 从原理上讲,本实施例中的方法具体是通过摄像机的观察位置不变,而改变视景体(图像)的位置及角度的方式来实现观察视角的偏转,从而实现观察视角的同步,优化用户体验。
[0165] 具体的,本实施例中步骤52包括:
[0166] 步骤521,根据所述实时跟踪数据,确定虚拟场景的立体图像的投影位置偏移信息;
[0167] 步骤522,根据所述确定的投影位置偏移信息和所述虚拟场景的原投影矩阵,构建新的投影矩阵。
[0168] 与前述实施例中获取原观察矩阵的方式一致,本实施例通过拦截技术获取原投影矩阵,其具体的过程不作详细描述。
[0169] 进一步的,本实施例中上述步骤521包括:
[0170] 步骤5211,根据所述实时跟踪数据和所述原投影矩阵的视点距近投影平面的距离,确定虚拟场景的立体图像的投影位置偏移信息。
[0171] 如图3所示,以OpenGL为例,left(左),right(右),bottom(下),top(上)定义了裁剪面大小,而Znear和Zfar定义了从摄像机到视锥远近两个裁剪面的距离。由这六个参数可以定义出六个裁剪面构成的锥体,这个锥体通常被称之为视锥体或视景体。
[0172] 本实施例中,投影位置的偏移包括位置的偏移和角度的偏移,即根据用户头部的实时跟踪数据计算角度的偏移,根据原投影矩阵的视点(如图3中摄像机的位置)距当前近投影平面的距离(如图3中所示的Znear)计算位置的偏移。
[0173] 例如用户头部向左(上)偏转,可以将视景体(图像)的L,R(T,B)向左(上)同时偏移DH(DV),来改变投影的位置和角度,此时向左的偏移量DH为:DH=Znear*tan(Pitch),向上的偏移量DV为:DV=Znear*tan(Yaw);
[0174] 其中有Znear为原投影矩阵P的视点到近投影平面距离,Pitch、Yaw为用户头部跟踪关于x轴和y轴旋转数据(弧度)。
[0175] 进一步的,本实施例中所述新的投影矩阵包括第一视图投影矩阵和第二视图投影矩阵,也可称为左视图投影矩阵和右视图投影矩阵;其中本发明的实施例五中上述步骤522包括:
[0176] 步骤5221,根据所述确定的投影位置偏移信息和所述原投影矩阵,构建第一视图投影矩阵和第二视图投影矩阵。
[0177] 将当前所述图像的投影位置移动上述计算得到的偏移量,即可得到偏移后的图像的投影位置。需要说明的是,该实施例中所指的投影矩阵与前述实施例中所指的观察矩阵一致,均为按照预先设定的格式处理并进行填充即可得到本实施例需要的投影矩阵,在此不重复描述。
[0178] 进一步的,本发明的实施例五中步骤53具体包括:
[0179] 步骤531,利用所述第一视图投影矩阵渲染生成虚拟场景的第三视图,并利用第二视图投影矩阵渲染生成虚拟场景的第四视图;
[0180] 步骤532,根据渲染生成的所述第三视图和第四视图,构建并显示虚拟场景的立体图像。本发明实施例五中同样利用注入技术将偏移后图像的投影矩阵注入到应用程序中,实现对观察视角的偏转,从而达到同步偏转视角的目的。
[0181] 即,在所述投影矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的投影矩阵对所述原渲染管线进行修改,从而实现利用所述新的投影矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。
[0182] 具体的,下面结合一具体实施例对本实施例提供的立体显示方法进行详细描述:
[0183] 例如用户头部向左(上)偏转,可以将视景体(图像)的L,R(T,B)向左(上)同时偏移DH(DV),来改变投影的位置和角度,此时向左的偏移量DH为:DH=Znear*tan(Pitch),向上的偏移量DV为:DV=Znear*tan(Yaw);
[0184] 其中有Znear为原投影矩阵P的视点到近投影平面距离,Pitch,Yaw为用户头部跟踪关于x轴和y轴旋转数据(弧度)。
[0185] 视景体(图像的投影)变换后的结果:
[0186]
[0187]
[0188] 以OpenGL为例,如图3所示,left(左),right(右),bottom(下),top(上)定义了裁剪面大小,而Znear和Zfar定义了从摄像机到视锥远近两个裁剪面的距离。由这六个参数可以定义出六个裁剪面构成的锥体,这个锥体通常被称之为视锥体或视景体。
[0189] 设L=left,R=right,B=bottom,T=top,Znear=near,Zfar=far,则投影矩阵可表述为:
[0190]
[0191] 则改变后的投影矩阵P‘为
[0192]
[0193] 可将改变后的投影矩阵P‘注入应用程序中,即利用P‘构建虚拟场景的立体图像,从而达到偏转视角的目的,实现观察视角的同步,优化用户体验。
[0194] 但需要说明的是,在本发明的一个实施例中,在为应用构建虚拟场景的立体图像时,可首先通过拦截技术获取应用本身的投影矩阵,在此基础上,在用户的观察视角发生改变后,以拦截获取的投影矩阵作为原投影矩阵,进行接下来的变换。
[0195] 具体实施例六:
[0196] 本实施例中,观察视角同步模式包括投影矩阵变换模式。当确定应用程序对应的观察视角同步模式为投影矩阵变换模式后,本实施例的立体显示方法,包括:跟踪用户的头部位置,获取用户头部位置的实时跟踪数据;根据所述实时跟踪数据,确定投影位置偏移信息;根据投影位置偏移信息,确定新的投影矩阵,进而同样利用下列公式(原理见具体实施例四),通过新的投影矩阵,原投影矩阵的逆矩阵,视差偏转矩阵和原变换矩阵,得到新的变换矩阵,进而利用新的变换矩阵构建并显示应用程序的立体图像。
[0197] ML=(PL*Vsep_L*Vrotation*P-1)*M
[0198] MR=(PR*Vsep_R*Vrotation*P-1)*M
[0199] 其中,Vrotation=E,为单位矩阵。
[0200] 关于如何得到头部的旋转矩阵,视差偏转矩阵、新的投影矩阵等均与前述实施例相同,这里不再详述。
[0201] 具体实施例七:
[0202] 本实施例中,观察视角同步模式包括鼠标变换模式。当确定应用程序对应的观察视角同步模式为鼠标变换模式后,本实施例的立体显示方法,包括:
[0203] 步骤71,跟踪用户的头部位置,获取用户头部位置的实时跟踪数据。
[0204] 可选的,如果用户是穿戴式的方式观看3D内容,可通过速度传感器或者加速度传感器等传感器件跟踪用户的头部位置从而获取用户头部位置的实时跟踪数据,如果是裸眼3D场景,可通过摄像头跟踪用户的头部位置从而获取用户头部位置的实时跟踪数据,本领域技术人员可以任意选择。
[0205] 具体的,用户头部位置的实时跟踪数据可以包括头部在三维空间中的实时转动角度,可通过预先建立一三维坐标系,从而获取用户头部相对于X轴的旋转角度、相对于Y轴的旋转角度以及相对于Z轴的旋转角度来共同表示用户头部的实时转动角度。当然,用户头部位置的实时跟踪数据还可包括头部在三维空间的实时平移距离,与实时转动角度类似,在此不做详述。
[0206] 举例说明,如图2所示,用户头部的实时跟踪数据包括头部在三维空间中的转动角度(Pitch,Yaw,Roll);其中,Pitch:用户头部相对于x轴的转动角度;Yaw:用户头部相对于y轴的转动角度;Roll:用户头部相对于z轴的转动角度。
[0207] 步骤72,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量。
[0208] 本实施例提供的立体显示方法可以适用于支持鼠标转动视角的应用场景中,即鼠标的移动可以控制偏转视角。将用户头部位置的实时跟踪数据与鼠标移动量绑定,则可以根据实时跟踪数据,例如用户头部的实时转动角度确定鼠标的移动量。
[0209] 具体的,其中鼠标可以为虚拟鼠标也可以为实际的鼠标,但是基于不影响3D内容整体画面感的前提,本申请中所指的鼠标一般为虚拟鼠标,即用于虚拟场景中的模拟鼠标。该模拟鼠标是与真实场景的实际鼠标相对应的,实际鼠标移动,该模拟鼠标相应移动,3D内容随模拟鼠标的移动而移动。可以理解的是,模拟鼠标可以是存在显示于虚拟场景中的,也可以是用于控制虚拟场景的视角改变的后台数据。本实施例中,将用户头部位置的改变与模拟鼠标的位置关联,从而改变虚拟场景的视角。
[0210] 步骤73,根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述模拟鼠标的位置信息生成并显示虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与用户头部位置变化后的观察视角同步。
[0211] 具体的,得到模拟鼠标的移动量后,修改模拟鼠标的位置信息,从而使得应用程序(例如3D游戏等)控制所述模拟鼠标移动,则游戏画面会由于模拟鼠标的移动而变换,从而达到游戏画面与用户头部的转动同步的目的。
[0212] 本实施例提供的立体显示方法中观察视角的同步方法即利用模拟鼠标进行偏转视角的方法,该方法适用于支持鼠标转动视角的应用,例如游戏应用,虽然此方式会影响正常鼠标的操作,但是在游戏的视角转换中,不影响整个管线和流程,更贴近与原游戏本身操控。
[0213] 优选的,为了避免头部位置数据的突然波动而造成观察视角的突变,进而使得用户产生眩晕感,本发明的具体实施例中,在所述根据所述实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量前,对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据;根据所述平滑滤波处理后的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量。这样,可以在后续构建并显示立体图像从而改变观察视角时,能够在一定程度上减弱用户的不适感,提升用户体验。
[0214] 具体的,本实施例中步骤72可以包括:
[0215] 步骤721,根据所述实时跟踪数据,确定所述用户头部的实时转动角度。
[0216] 可以理解的是,在很多场景中,例如第一人称射击游戏中,只关注头部关于X轴和Y轴的旋转变换,则可直接根据X轴数据和Y轴数据确定用户头部的实时转动角度。
[0217] 步骤722,根据所述用户头部的实时转动角度,确定用于虚拟场景的模拟鼠标的移动量。
[0218] 进一步的,本实施例中步骤71包括:
[0219] 步骤711,获取用户头部的当前帧的跟踪数据和该用户头部前一帧的跟踪数据;
[0220] 例如,即取出当前帧的头部跟踪数据中的Pitch(头部绕x轴旋转角度),Yaw(头部绕y轴旋转角度),作为基准值;再获取前一帧的Pitch,Yaw。根据当前帧的头部跟踪数据和前一帧的跟踪数据能够准确的确定用户头部的转动角度。
[0221] 步骤712,获取当前帧的跟踪数据和前一帧的跟踪数据的差值,并由所述差值确定所述实时转动角度。
[0222] 具体的,将当前帧的Pitch(头部绕x轴旋转角度),Yaw(头部绕y轴旋转角度)和前一帧的Pitch(头部绕x轴旋转角度),Yaw(头部绕y轴旋转角度)分别作差,得到ΔPitch,ΔYaw。该ΔPitch,ΔYaw分别为用户头部沿X轴和沿Y轴的实时转动角度。
[0223] 进一步的,本实施例中步骤722包括:
[0224] 步骤7221,将所述用户头部的实时转动角度与一预设转换系数相乘,得到用于虚拟场景的所述模拟鼠标的移动量。
[0225] 即将上述步骤712得到的ΔPitch,ΔYaw分别乘以一预设转换系数,该预设转换系数为用来转换头部转动角度和鼠标偏移量的转换因子,从而得到Δx,Δy;从而通过Δx,Δy,改变鼠标位置:鼠标.x+=Δx;鼠标.y+=Δy;即将模拟鼠标沿X轴移动Δx,沿Y轴移动Δy,即可达到偏转视角的目的,从而实现用户的观察视角的同步。
[0226] 本发明实施例中,在各种同步模式下,具体的,可拦截应用程序原有的渲染管线内容进行修改并将需要配置的数据信息注入到配置文件中,致使修改后的管线和内容可以产生左右眼分别对应的视差图像,当运行应用程序后,会将相关的配置信息载入进来,并且应用到相关的各级渲染管线单元或者其他流程中去,完成修改和变换。注入的信息例如包含:立体显示参数以及观察视角的模式参数等。在实际使用中,我们可以获取游戏的唯一标识(例如Hash值、或者应用包名),利用这个标识可对每个应用配置不同的参数。
[0227] 为了更好的实现上述目的,如图4所示,本发明还提供一种用于虚拟和现实场景的立体显示装置,包括:
[0228] 获取模块61,用于获取应用程序的标识信息;
[0229] 确定模块62,用于根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;
[0230] 显示模块63,用于根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步。
[0231] 具体的,本发明的上述实施例五中,所述观察视角同步模式包括以下模式中的至少一种:观察矩阵变换模式、投影矩阵变换模式和鼠标变换模式;
[0232] 所述显示模块可包括:
[0233] 观察矩阵变换模块,用于在所述观察矩阵变换模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原观察矩阵进行变换,得到新的观察矩阵,根据所述新的观察矩阵,构建并显示所述应用程序的虚拟场景的立体图像;
[0234] 或者,
[0235] 跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据,确定用户头部的位移矩阵,根据用户头部的位移矩阵、虚拟场景的视差偏转矩和虚拟场景的原变换矩阵,确定新的变换矩阵,根据所述新的变换矩阵,构建并显示虚拟场景的立体图像;
[0236] 所述显示模块可包括:
[0237] 投影矩阵变换模块,用于在所述投影矩阵变换模式下,跟踪所述应用程序的用户的头部位置,获取用户头部位置的实时跟踪数据,当用户的头部位置发生变化时,根据所述实时跟踪数据对虚拟场景的原投影矩阵进行变换,得到新的投影矩阵,根据所述新的投影矩阵,构建并显示所述应用程序的虚拟场景的立体图像;
[0238] 所述显示模块可包括:
[0239] 鼠标变换模块,用于在所述鼠标变换模式下,跟踪所述应用程序的用户的头部位置,根据用户头部位置的实时跟踪数据,确定用于虚拟场景的模拟鼠标的移动量;根据所述模拟鼠标的移动量,修改所述模拟鼠标的位置信息,以实现根据修改后的所述虚拟鼠标的位置信息生成并显示虚拟场景的立体图像。
[0240] 具体的,所述应用程序的标识信息包括所述应用程序对应的哈希Hash值或者所述应用程序的安装包名称。
[0241] 具体的,上述确定模块62包括:
[0242] 第一确定子模块,用于根据所述获取的标识信息和预先设置的应用程序标识信息与观察视角同步模式的对应关系,确定所述应用程序对应的观察视角同步模式;
[0243] 或者
[0244] 第二确定子模块,用于根据所述获取的标识信息,确定所述应用程序的显示场景类型;
[0245] 第三确定子模块,用于根据所述确定的显示场景类型,确定所述应用程序对应的观察视角同步模式。
[0246] 具体的,上述观察矩阵变换模块包括:
[0247] 第一变换子模块,用于在所述观察矩阵变换模式下,首先对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据,然后利用所述平滑滤波处理后的实时跟踪数据进行后续处理。
[0248] 具体的,本发明的上述实施例五中,上述观察矩阵变换模块还包括:
[0249] 第二变换子模块,用于在所述观察矩阵变换模式下,根据所述实时跟踪数据,确定用户头部的旋转矩阵,根据所述用户头部的旋转矩阵、虚拟场景的视差偏转矩阵以及所述虚拟场景的观察矩阵,确定新的观察矩阵。
[0250] 具体的,本发明的上述实施例五中,上述观察矩阵变换模块还包括:
[0251] 第三变换子模块,用于在所述观察矩阵变换模式下,根据预先配置或者根据用户输入的设置参数确定虚拟场景的视间距信息,根据所述确定的视间距信息确定虚拟场景的视差偏转矩阵。
[0252] 具体的,本发明的上述实施例五中,上述观察矩阵变换模块还包括:
[0253] 第四变换子模块,用于在所述观察矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的观察矩阵,对所述原渲染管线进行修改,从而实现利用所述新的观察矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。
[0254] 具体的,上述投影矩阵变换模块包括:
[0255] 第五变换子模块,用于在所述投影矩阵变换模式下,首先对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据,然后利用所述平滑滤波处理后的实时跟踪数据进行后续处理。
[0256] 具体的,上述投影矩阵变换模块包括:
[0257] 第六变换子模块,用于在所述投影矩阵变换模式下,根据所述实时跟踪数据,确定虚拟场景的立体图像的投影位置偏移信息,根据所述确定的投影位置偏移信息和所述虚拟场景的投影矩阵,构建新的投影矩阵。
[0258] 具体的,上述投影矩阵变换模块还包括:
[0259] 第七变换子模块,用于在所述投影矩阵变换模式下,根据所述用户头部的实时跟踪数据和所述原投影矩阵的视点距近投影平面的距离,确定所述投影位置偏移信息。
[0260] 具体的,上述投影矩阵变换模块还包括:
[0261] 第八变换子模块,用于在所述投影矩阵变换模式下,拦截所述应用程序的原渲染管线,根据所述新的投影矩阵对所述原渲染管线进行修改,从而实现利用所述新的投影矩阵渲染产生所述应用程序用户的左右眼分别对应的视差图像,进而基于所述左右眼分别对应的视差图像构建并显示虚拟场景的立体图像。
[0262] 具体的,上述鼠标变换模块包括:
[0263] 第八变换子模块,用于在所述鼠标变换模式下,首先对所述实时跟踪数据进行平滑滤波处理,得到平滑滤波处理后的实时跟踪数据,然后利用所述平滑滤波处理后的实时跟踪数据进行后续处理。
[0264] 具体的,上述鼠标变换模块包括:
[0265] 第九变换子模块,用于在所述鼠标变换模式下,根据所述头部位置的实时跟踪数据,确定所述用户头部的实时转动角度,根据所述用户头部的实时转动角度,确定用于虚拟场景的模拟鼠标的移动量。
[0266] 具体的,本发明的上述实施例五中,上述鼠标变换模块还包括:
[0267] 第十变换子模块,用于在所述鼠标变换模式下,获取用户头部的当前帧的跟踪数据和该用户头部前一帧的跟踪数据,获取当前帧的跟踪数据和前一帧的跟踪数据的差值,并由所述差值确定所述实时转动角度。
[0268] 需要说明的是,本发明实施例提供的用于虚拟和现实场景的立体显示装置是应用上述用于虚拟和现实场景的立体显示方法的装置,则上述用于虚拟和现实场景的立体显示方法的所有实施例均适用于该用于虚拟和现实场景的立体显示装置,且均能达到相同或相似的有益效果。
[0269] 为了更好的实现上述目的,本发明实施例七还提供一种用于虚拟和现实场景的电子设备,包括:
[0270] 壳体、处理器、存储器、显示器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:
[0271] 获取应用程序的标识信息;
[0272] 根据所述获取的标识信息,确定所述应用程序对应的观察视角同步模式;
[0273] 根据所述确定的观察视角同步模式,在所述应用程序的用户的头部位置发生变化时,构建并显示所述应用程序的虚拟场景的立体图像,从而对虚拟场景的观察视角进行变换,实现虚拟场景下的观察视角与所述用户头部位置变化后的观察视角同步。
[0274] 该电子设备以多种形式存在,包括但不限于:
[0275] (1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等;(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad;(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备;(4)其他具有数据交互功能的电子装置。
[0276] 需要说明的是,本发明实施例提供的电子设备是能够应用上述用于虚拟与现实场景的立体显示方法的电子设备,则上述立体显示方法的所有实施例及其有益效果均适用于该电子设备。
[0277] 以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。