说明书沉浸式虚拟现实系统中的空间菜单的实现方法
技术领域
本发明属于虚拟现实应用领域,特别是涉及在沉浸式虚拟现实系统中具有立体感的可直接使用手指控制交互的空间菜单的实现方法。
背景技术
虚拟现实(Virtual Reality,VR)技术通过模拟人的视觉、听觉、触觉等感官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,使使用者能够“身临其境”感受计算机再现的客观物理世界,实现以沉浸性(Immersion)、交互性(Interaction)和构想性(Imagination)为基本特征的计算机高级人机界面。
沉浸式虚拟现实系统的特点更强调系统带给使用者的沉浸感。一般的沉浸式虚拟现实系统通常提供立体显示系统,头部跟踪器来跟踪眼部的位置以提供屏幕和眼睛之间的相对位置。沉浸式虚拟现实系统提供给用户逼真的虚拟三维环境,不仅在于系统需要展示的场景,还包括用户对于系统的控制方式。如果使用的控制设备和界面不在用户沉浸的环境中,会影响整个系统的沉浸感。
发明内容
基于上述理由,需要开发一种与沉浸式虚拟环境融合为一体的交互方式,即具有空间感,可直接进行操作的系统菜单。
本发明的目的在于提供一种沉浸式虚拟现实系统中空间菜单的生成和交互方法,解决对虚拟场景的控制问题。其中作为系统控制的菜单也作为沉浸式显示的一部分,利用位置跟踪器探测出操纵手段(例如手指)的位置,通过计算真实世界中的三维坐标与三维虚拟场景空间中的映射关系,直接操作三维场景中显示的菜单,达到更加逼真的沉浸效果。
本发明的上述目的可以通过下述方案来实现。
一种沉浸式虚拟现实系统中的空间菜单的实现方法,包括如下步骤:
步骤一:建立空间菜单的类和按钮的类,在系统运行过程中按照不同的需求实例化对象;
步骤二:利用位置跟踪器探测操纵手段的位置;
步骤三:将发射所述位置跟踪器所探测的位置的位置发射器的坐标系与三维空间的坐标系进行映射匹配,根据视点的位置设置菜单在三维空间中的位置,将所述操纵手段的坐标也映射到三维空间中;
步骤四:检测所述操操纵手段的位置与菜单项的包含关系,控制系统。
在至少一个可选实施方式中,所述操纵手段为手指。
在至少一个可选实施方式中,所述虚拟现实系统包括立体投影系统,在三面投影的夹角中生成空间立体影象。
在至少一个可选实施方式中,根据所述手指在虚拟空间中的位置与菜单的位置关系,进行点与包围盒的位置关系判断。
在至少一个可选实施方式中,所述位置跟踪器根据应用需要,获取三个特征数据,即帧序号,位置值,方向值,系统运行中获取目前最后一帧的位置/方向值进行图形更新。
在至少一个可选实施方式中,由所述位置跟踪器获得所述操纵手段的位置相对于所述位置发射器的坐标,在采集完相应数据后进行坐标转换和单位转换。
在至少一个可选实施方式中,所述位置跟踪器包括头部跟踪器和手指跟踪器,所述头部跟踪器和所述手指跟踪器使用同一位置发射器。
在至少一个可选实施方式中,通过所述头部跟踪器获得的眼睛坐标假设为(a,b,c),方向为(u,v,w),其中u,v,w分别是在绕X,Y,Z轴的旋转值,
则所述位置跟踪器坐标系与虚拟场景坐标系的转换矩阵为:
其中,l,m,n表示在各个坐标轴方向上的平移,
将双眼坐标转换到虚拟场景的三维坐标中的坐标值为:
手指在所述位置跟踪器坐标系下的值为[i,j,k],经转换后在虚拟场景坐标系下的矩阵表示:
菜单位置的矩阵表示:
其中,A为假设的操作者的臂长。
在至少一个可选实施方式中,所述虚拟现实系统采用C++语言作为开发语言。
本发明能够实现沉浸式虚拟现实中的菜单,其突出特点是可以直接用手指操作立体显示的虚拟菜单。本发明中所述的空间菜单的方法,将立体视觉与手指的直接操作融合在一起,可以弥补传统方法的不足,提升系统操作中的真实感。
附图说明
图1为根据本发明的一个实施方式的空间菜单的应用场景图;
图2为根据本发明的一个实施方式的坐标系转化图;
图3为根据本发明的一个实施方式的系统结构图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步详细的描述。
本发明的应用场景如图1所示,其中附图标记10表示位置发射器,附图标记20表示位置跟踪器,即传感器。图2为根据本发明的一个实施方式的坐标系转化图;
用户操作沉浸式虚拟现实系统,立体投影系统例如使用桌面式CAVE立体投影系统,在三面投影幕形成的夹角中生成空间立体影象。系统中使用位置跟踪器20分别进行头部和手部跟踪。系统运行后,由立体投影系统生成的空间菜单呈现在用户面前,用户使用绑定位置传感器的手指可以直接对看到的菜单在相应位置上进行操作,根据手指在虚拟空间中的位置与菜单的位置关系,进行点与包围盒的位置关系判断,从而点击菜单,控制系统,实现高度的沉浸感与方便的交互模式。
系统为了满足人机交互的实时响应与操作,优选地采用运行速度更快的C++语言作为开发语言,采用微软公司的MFC(Microsoft Foundation Classes,微软基础类)作为软件平台,图形开发采用OpenGL/OpenScenegraph,硬件设备包括立体投影系统和位置传感器设备。
在本发明的一个实施方式中,本发明的沉浸式虚拟现实系统中的空间菜单的实现方法包括以下步骤:
第一步,首先建立空间菜单的类和按钮的类,在系统运行过程中按照不同的需求实例化对象;
菜单类的定义如下:
按钮类的定义如下:
在建立菜单的同时加载按钮包围盒访问器及响应事件。
第二步,利用位置跟踪器探测手指的位置;
空间菜单的沉浸感一方面来自于立体视觉感受,另一方面来自于直接的手指点击控制,手指的位置由位置传感器20获取。
位置传感器20设备管理包括设备初始化、更新映射图、缓冲区设置以及从缓冲区中读取有效数据。
位置传感设备一般提供单帧和连续两种数据输出方式,本系统由于需要将位置传感器20的数值实时的传递给系统,并且在视觉模拟中表现出来,所以需要采取异步帧采集的模式进行连续的数据输出,在消息循环空闲时间进行P&O(位置/方向)帧采样,这样能够在保持跟踪器获取大量数据的同时不降低windows的效能。在数据格式初始化时,根据应用需要,获取三个特征数据,即帧序号,位置值,方向值,系统运行中获取目前最后一帧的位置/方向值进行图形更新。
第三步,将位置发射器10的坐标系与三维空间的坐标系进行映射匹配,将传感器坐标映射到虚拟空间中,根据视点的位置设置菜单在三维空间中的位置,并将手部传感器坐标映射到虚拟空间中。
由位置跟踪器20获得手指位置是相对于发射器10的坐标,在采集完相应数据后需要进行坐标转换和单位转换,如图2。根据操作者的视点位置映射到空间菜单所在的三维虚拟空间里中,判断手指的位置是否在菜单项区域内。
因为头部跟踪器与手部跟踪器使用的发射器是一个。所以在同一坐标系内,头部跟踪器确定的是双眼的位置,投影成像的菜单始终要在距离用户眼睛例如80厘米正前方的位置,所以菜单的位置坐标为眼睛坐标在深度上位移例如80厘米,方向与头部跟踪器在水平位置上相对。
通过跟踪器获得的眼睛坐标假设为(a,b,c),方向为(u,v,w),其中u,v,w分别是在绕X,Y,Z轴的旋转值。
跟踪器坐标系与虚拟场景坐标系的转换矩阵为:
其中,l,m,n表示在各个坐标轴方向上的平移。
将双眼坐标转换到虚拟场景的三维坐标中的坐标值为:
手在位置跟踪器坐标系下的值为[i,j,k],经转换后在虚拟场景坐标系下的矩阵表示;
菜单位置的矩阵表示:
注:80cm假设为操作者臂长,当然,操作者的臂长不限于80cm。
第四步:检测手指与菜单项的包含关系,控制系统;
经过坐标转换,手指与虚拟菜单在统一的三维空间里,就可以根据菜单按钮包围盒检测手指与菜单按钮的包围关系。包围盒访问器主要求得各种几何形状的按钮的包围盒。如果手指的点位置在按钮包围盒内,就判断为菜单按钮按下,按钮发生位移,响应事件启动。
图3示出根据本发明的一个实施方式的系统结构图。其中,位置跟踪器和其他设备经由设备驱动接口连接至系统,通过立体显示和辅助设备来构造虚拟现实系统。
上面参照附图说明了本发明的优选实施方式,但是,应当理解,上述说明仅是示例性的。本领域的技术人员可以在不脱离本发明的精神和范围的前提下,对本发明作出各种修改和变型。本发明的保护范围由所附的权利要求书限定。