1.智能机姿态测定方法,包括以下步骤:
1)定义局部坐标系:
局部坐标系是指原点在智能机,Z轴指向地球表面法方向,Y轴或X轴与纬线相平行的坐标系;或局部坐标系原点位于地球上任意一点,Z轴与重力方向一致,且,若智能机磁力计指示方向是北,则北代表局部坐标系X轴,西代表局部坐标系Y轴;
若智能机磁力计指示方向是东,则东代表局部坐标系X轴,北代表局部坐标系Y轴;
若智能机磁力计指示方向是南,则南代表局部坐标系X轴,东代表局部坐标系Y轴;
若智能机磁力计指示方向是西,则西代表局部坐标系X轴,南代表局部坐标系Y轴;
2)测定智能机姿态矩阵Rg:
Rg是一个相对于局部坐标系的3x3单位正交矩阵,
Rg由下法之一获得:
方法(1)采用重力传感器与磁力计或方向传感器:
如果智能机有重力传感器,且有磁力计或方向传感器,用以下公式(1)计算Rg:
其中,
vax,vay,vaz是智能机测出来的智能机重力加速度传感器的x,y,z三个方向的值,或是这三个值经滤波的结果;
Ra是重力传感器芯片相对于智能机的姿态转换矩阵;
若智能机检测到的重力加速度传感器定义为负值:当az≤0时,s=1,
az>0时,s=-1;若智能机检测到的重力加速度传感器定义为正值:当az≤0时,s=-1,az>0时,s=1;
若采用方向传感器: 带入公式(1)计算Rg;
若采用磁力计传感器:计算
其中Rm是磁力传感器芯片相对于智能机的姿态转换矩阵;{vmx,vmy,vmz}是智能机上磁力传感器检测到的三个值或这三个值经滤波的结果;
再计算
利用磁力计计算方位角 的三角函数为:
带入公式(1)即可算出Rg;
若既无磁力计,也无方向传感器,方位角 角初值为0,当模拟逆时针绕重力方向旋转时增加 角,模拟顺时针绕重力方向旋转则减小 角;
方法(2)用旋转矢量传感器:
如果智能机配置有旋转矢量传感器,
首先采用下述(a)(b)(c)中的一种方式得到Rg0矩阵:
(a)如果检测到智能机上的旋转矢量传感器只有3个数据values[0],values[1],values[2],
采用以下公式得到:
q1=values[0],q2=values[1],q3=values[2],
则Rg0矩阵为:
(b)如果检测智能机上的旋转矢量传感器有4个数据,
q0=values[3],q1=values[0],q2=values[1],q3=values[2],
则Rg0矩阵为:
(c)智能机上指定传感器类型为旋转矢量类型TYPE_ROTATION_VECTOR,实时得到旋转矢量传感器的观测值;利用智能机上的旋转矢量转矩阵函数将传感器的观测值转换成绘图转换矩阵R44,R44矩阵的左上角3x3子阵是Rg0;
然后根据智能机旋转矢量传感器坐标系定义的不同,采取以下几种情况之一得到Rg:
若旋转矢量传感器的X轴指向东,Y轴指向北,则
若旋转矢量传感器的X轴指向北,Y轴指向西,则
Rg=Rg0; (3)
若旋转矢量传感器的X轴指向南,Y轴指向东,则
方法(3)采用陀螺仪、加速度计与磁力计迭代:
第1步:选用方法(1)或方法(2)计算Rg的初值,将Rg转换成4元数q0,q1,q2,q3作为以下第
2-7步迭代的初值;
第2步:设定exInt,eyInt,ezInt原始值为0,
exInt=0,eyInt=0,ezInt=0;
第3步:根据接收到的磁力计矢量{mx,my,mz},得到正确磁场矢量{wx,wy,wz};
先将矢量{mx,my,mz}替换成将其单位化以后的矢量 得到局
部坐标系下磁场的正确的磁场方向矢量{bx,0,bz};
hx=2×mx×(0.5-q2×q2-q3×q3)+2×my×(q1×q2-q0×q3)+2×mz×(q1×q3+q0×q2);
hy=2×mx×(q1×q2+q0×q3)+2×my×(0.5-q1×q1-q3×q3)+2×mz×(q2×q3-q0×q1);
hz=2×mx×(q1×q3-q0×q2)+2×my×(q2×q3+q0×q1)+2×mz×(0.5-q1×q1-q2×q2);
bz=hz;
再转换到正确磁场矢量{wx,wy,wz}:
wx=2×bx×(0.5-q2×q2-q3×q3)+2×bz×(q1×q3-q0×q2);
wy=2×bx×(q1×q2-q0×q3)+2×bz×(q0×q1+q2×q3);
wz=2×bx×(q0×q2+q1×q3)+2×bz×(0.5-q1×q1-q2×q2);
第4步:根据接收到的重力加速度计数据ax,ay,az,和{wx,wy,wz}得到误差矢量{ex,ey,ez}并计算其累计值exInt,eyInt,ezInt:
先将矢量{ax,ay,az}替换成将其单位化以后的矢量
vx=2*(q1*q3-q0*q2);vy=2*(q0*q1+q2*q3);
vz=q0*q0-q1*q1-q2*q2+q3*q3;
ex=(ay×vz-az×vy)+(my×wz-mz×wy);
ey=(az×vx-ax×vz)+(mz×wx-mx×wz);
ez=(ax×vy-ay×vx)+(mx×wy-my×wx);
计算误差累计值;
exInt替换为exInt+ex×Ki;eyInt替换为eyInt+ey×Ki;ezInt替换为ezInt+ez×Ki;
其中Ki为一可调节的正系数,Ki在0.00001至0.5中任意选取;
第5步:根据误差矢量{ex,ey,ez}及其累计值纠正陀螺仪数据{gx0,gy0,gz0}:
假设智能机读出当前的一组陀螺仪数据为{gx0,gy0,gz0},gx=gx0+Kp×ex+exInt;gy=gy0+Kp×ey+eyInt;gz=gz0+Kp×ez+ezInt;
其中Kp为一可调节的正系数,
Kp在0.000001至20.0中任意选取;
第6步:根据陀螺仪数据gx,gy,gz修正四元数:
随着不断接收到陀螺仪数据gx,gy,gz,对4元数按如下方式修正,halfT为修正周期,halfT=0.00001~10.0,
q0替换为q0+(-q1×gx-q2×gy–q3×gz)×halfT;q1替换为q1+(q0×gx-q3×gy+q2×gz)×halfT;q2替换为q2+(q3×gx+q0×gy-q1×gz)×halfT;q3替换为q3+(-q2×gx+q1×gy+q0×gz)×halfT;
第7步:输出Rg矩阵和四元数:
将四元数{q0,q1,q2,q3}单位化成 输出;
4元数转Rg矩阵公式如下:
第8步:回到第3步继续接收陀螺仪运动数据更新姿态4元数q0~q3,在循环的过程中每次到第7步都能输出当前的Rg矩阵和四元数。
2.智能机显示屏的姿态测定方法,包括以下步骤:
智能机显示屏的姿态矩阵为:
rx是智能机显示屏像素阵列x轴方向在局部坐标系中的分量;
ry是智能机显示屏像素阵列y轴方向在局部坐标系中的分量;
rz是垂直于智能机显示屏表面方向向智能机显示屏内部朝前看的视线方向在局部坐标系中的分量;
1)按权利要求1的方法测定智能机姿态,并得到智能机的姿态矩阵Rg;
2)计算R=ΔR×Rg;得到智能机显示屏的姿态矩阵;
ΔR为智能机显示屏姿态矩阵R相对于智能机姿态矩阵Rg的一个固定的方向的转换,智能机自身Z轴定义为智能机加速度计的z轴方向,
当显示屏观察方向和智能机自身Z轴方向刚好相反时
当显示屏观察方向和智能机自身Z轴方向完全一致时
否则可在智能机上选择一个与智能机显示屏姿态一致的摄像头,即摄像头的xyz三轴分别与显示屏的xyz三轴平行且方向一致,采用摄影测量后方交会方法测量出智能机摄像头相对于局部坐标系的姿态矩阵RA,并用权利要求1方法测得此时智能机的姿态矩阵Rg,得-1
到ΔR=RARg 。
3.基于智能机姿态的虚拟现实漫游方法,包括以下步骤:
1)采用权利要求2所述的方法得到智能机显示屏的姿态矩阵R,
2)移动控制漫游观察者在局部坐标系中的位置:
定义漫游观察者是在局部坐标系中的一个具备自身位置、姿态且用于观察周边场景的对象;智能机显示屏所渲染的场景就是漫游观察者在局部坐标系中所应看到的场景图像;
定义漫游观察者在局部坐标系中的坐标为Xd,Yd,Zd;
用以下三种模式之一控制漫游观察者在虚拟场景中的移动:
(1)模式1:普通二维移动
当手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,相当于局部坐标系下,Xd增加Vx=ΔXr11+ΔYr21;Yd增加Vy=ΔXr12+ΔYr22;Zd不变;
(2)模式2:智能二维移动
当手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,采用如下方法:
首先选择R矩阵右侧一列中的r13,r23,r33中哪一个分量的绝对值最大,
如果|r33|最大,Xd增加Vx=ΔXr11+ΔYr21,Yd增加Vy=ΔXr12+ΔYr22;
如果|r23|最大,Xd增加Vx=ΔXr11±ΔYr31,Yd增加Vy=ΔXr12±ΔYr32;
r23≥0时,±取+;r23<0时±取-;或者r23≥0时,±取-;r23<0时±取+;
如果|r13|最大,Xd增加Vx=±ΔXr31+ΔYr21,Yd增加Vy=±ΔXr32+ΔYr22;
r13≥0时,±取+;r13<0时±取-;或者r13≥0时,±取-;r13<0时±取+;
(3)模式3:三维漫游移动
因为智能机显示屏只有二维,单个手指滑动只能进行二维操作,单指划过手机显示屏时ΔX和ΔY与滑动位移成正比;此时操作智能机的用户双指滑动触碰智能机操作实现3维操作:采用双指合拢相当于ΔZ<0,双指拉开相当于ΔZ>0,或者双指合拢相当于ΔZ>0,双指拉开相当于ΔZ<0;当智能机接收到手指控制信息{ΔX,ΔY,ΔZ}的时候,Xd增加Vx=ΔXr11+ΔYr21+ΔZr31,Yd增加Vy=ΔXr12+ΔYr22+ΔZr32,Zd增加Vz=ΔXr13+ΔYr23+ΔZr33;
3)设置漫游观察者在局部坐标系里的位置和方向:
根据漫游观察者的局部坐标系坐标Xd,Yd,Zd,以及步骤1)测定得到的姿态矩阵R,利用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库中用于设定相机位姿的图形库函数,设置漫游观察者在局部坐标系里的位置和方向:
需要设定以下几个量:
(1)漫游观察者自身观察的垂直视场角θ,就是智能机显示屏上边缘中点的视线方向与下边缘中点的视线方向的夹角;
(2)漫游观察者所在的位置Xd,Yd,Zd,由步骤2)漫游方法修改;
(3)漫游者观察方向{r31,r32r33}或者用户注视点坐标(Xd+r31,Yd+r32,Zd+r33);
(4)漫游者自身向上方向的矢量{-r21,-r22,-r23},
其中步骤(3)和(4)中的rij是智能机显示屏姿态R矩阵中的第i行j列,i=2或3,j=1、2或3;
4)在局部坐标系下渲染绘制三维场景:
预先在智能机的显示屏内设置一个3维渲染图层进行三维场景渲染;
这里被绘制的三维场景中的点、线、面和物体模型的几何坐标都要转换成局部坐标系下的坐标[Xi Yi Zi]T,即与漫游者的坐标Xd,Yd,Zd在同一个局部坐标系下;用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库实现局部坐标系下的三维绘图。
4.根据权利要求3所述的方法,其特征在于:步骤4)中几何坐标转换到局部坐标系下之后,再按如下三种方法之一渲染绘制使得局部坐标系中的一个标有广告符号、文字的纹理多边形面或广告牌的正面始终正对着漫游观察者:
方法1:
假设广告符号、文字的纹理多边形面或广告牌的局部坐标系坐标在Xi,Yi,Zi,按下法设置模型绘制转换矩阵M44:
ΔXi=Xi-Xd,ΔYi=Yi-Yd,
M44是一个4x4矩阵,其中每一元素的值如下设定:
将M44设定为模型转换矩阵;在y-z平面上绘图即可在虚拟场景中让广告符号、文字的纹理多边形面或广告牌永远正对漫游观察者;
方法2:
(a)假设广告符号、文字的纹理多边形面或广告牌的局部坐标系坐标在Xi,Yi,Zi,按如下方法设置模型绘制转换矩阵M44:
ΔXi=Xi-Xd,ΔYi=Yi-Yd,
M44是一个4x4矩阵,其中每一元素的值如下设定:
将M44设定为模型转换矩阵;
(b)在x-z平面上绘图即可在虚拟场景中让广告牌永远正对漫游观察者;
方法3:
假设广告符号、文字的纹理多边形面或广告牌的局部坐标系坐标在Xi,Yi,Zi,按如下方法设置模型绘制转换矩阵M44:
ΔXi=Xi-Xd,ΔYi=Yi-Yd,
M44是一个4x4矩阵,其中每一元素的值如下设定:
将M44设定为模型转换矩阵;在x-z平面上绘图即可在虚拟场景中让多边形面或广告牌永远正对漫游观察者。
5.根据权利要求3所述的方法,其特征在于:
在所述步骤3)和步骤4)之间增加如下操作:
(a)获取智能机的高度hs,纬度θs和经度
θs是智能机的纬度, 是智能机的经度,由智能机上自带的GPS接受模块获取;
(b)计算智能机所在经纬度的Rv,
(c)计算智能机所在纬度θs经度 高度hs的地心坐标系坐标Ts,
利用大地测量学中经典的转换公式:
得到Ts;
其中,
hs是智能机离地面高度,
Ns是随纬度变化的卯酉圈曲率半径;
a,b是地球椭球的长短轴,是大地测量学中的已知常量;
e是偏心率,是定值;
(d)根据地球上任何一个点的经度 纬度θi和高程hi得到该点地心坐标系坐标T0i=[X0i Y0i Z0i]T,
利用大地测量学中经典的转换公式:
得到T0i;
其中,
hi是点离地面高度,
Ni是随纬度变化的卯酉圈曲率半径;
a,b是地球椭球的长短轴,是大地测量学中的已知常量;
e是偏心率,是定值;
如果已知一个物体所在经纬度 和θi,通过本步骤计算出它的地心坐标系坐标T0i;
(e)地心坐标系坐标T0i转换为局部坐标系中的坐标(Xi Yi Zi)T,
ΔT是局部坐标系中智能机显示屏的几何中心相对于智能机GPS接收天线的局部坐标系偏移。
6.根据权利要求3所述的方法,其特征在于:
权利要求3步骤2)中当手指滑动的时候,根据手指滑动速度大小给予一个初速度{Vx,Vy,Vz},Xd,Yd,Zd将不停地增加速度分量Vx,Vy,Vz,此过程中让速度分量Vx,Vy,Vz随时间推移不断衰减,其中VZ在权利要求3步骤2)模式(1)或(2)情况下恒等于零;
让速度体现到局部坐标系下的漫游位移;
Xd增加Vx,
Yd增加Vy,
Zd增加Vz,
漫游观察者在虚拟场景中移动过程中速度大小不断衰减,
采用以下方法使Vx,Vy,Vz不停地衰减:
1)运动过程中Vx,Vy,Vz自身分别不断地乘以k=0.1~0.9999进行衰减,
运动过程中Vx自身不断地乘以k,直到Vx减小为0为止;
运动过程中Vy自身不断地乘以k,直到Vy减小为0为止;
运动过程中Vz自身不断地乘以k,直到Vz减小为0为止;
或者,
2)运动过程中Vx,Vy,Vz自身分别不断地进行以下增量操作:
Vx自身不断地增加-Vx*k,直到Vx减小为0为止;
Vy自身不断地增加-Vy*k,直到Vy减小为0为止;
Vz自身不断地增加-Vz*k,直到Vz减小为0为止;
其中k=0.0001~0.5,
以上修改Xd,Yd,Zd及Vx,Vy,Vz的过程不断循环即实现局部加速度漫游效果。
7.根据权利要求3所述的方法,其特征在于:
在步骤3)和步骤4)之间或在步骤4)之后,将智能机的显示屏设定为二维绘图模式并设置若干个二维标签,针对每一个二维标签,按如下步骤显示:
1)首先确定二维标签的中心位置u,v;
如果标签用于标注三维场景中局部坐标系坐标为(X,Y,Z)的目标,则根据以下公式确定目标显示的中心位置u,v,
ZO=r31(X-Xd)+r32(Y-Yd)+r33(Z-Zd),
式中:cx,cy是智能机显示屏中心点
的坐标,若显示屏是矩形,cx=屏宽/2,cy=屏高/2;
r11~r33是R矩阵对应行列的元素;
h是显示屏上下边缘垂直像素长,θ是漫游观察者自身观察的垂直视场
角,
Xd,Yd,Zd是漫游观察者在局部坐标系中的坐标;
如果满足ZO>0且u,v在显示屏范围内,则u,v保持不变,
否则需要按下法修正u,v;
若ZO=0则将[u v]替换为从点(cx,cy)出发,
按矢量{r11(X-Xd)+r12(Y-Yd)+r13(Z-Zd),r21(X-Xd)+r22(Y-Yd)+r23(Z-Zd)},方向的射线与显示屏边缘相交的2维点;若ZO>0则将u,v替换成从点(cx,cy)到点(u,v)的连线与显示屏边缘相交的2维点;若ZO<0则将u,v替换成从点(u,v)到点(cx,cy)延长线与显示屏边缘相交的2维点;
如果二维标签不是用于标注目标,u,v为显示屏范围内的一个由界面设计者设定的像素坐标,或是用户手指触摸或鼠标点击的显示屏像素坐标;
2)按下述方法(1)或(2)计算矢量{Qx,Qy}:
方法(1)Qx=-r23/La,Qy=r13/La;
其中r23,r13是权利要求2所述的方法中的R矩阵对应行列的元素,
方法(2)利用权利要求1所述的方法(1)所述加速度计的前两个输出值ax,ay得到Qx=-ay/La,Qy=ax/La,
3)在二维平面上经过以下矩阵旋转变换以后再绘制二维标签:
二维标签上每一点X,经过上式变换到坐标X’显示出来;
式中±取+是正放显示,取-是倒放显示,标签的水平轴始终平行于地面。
8.根据权利要求3所述的方法,其特征在于:
所述三维场景为一个空心的三维形体,三维形体为空心球,空心立方体、空心柱体、空心正多面体或空心锥体,三维形体的内壁以全景图作为纹理进行渲染;所述漫游观察者在虚拟场景中位于三维形体内部的某一点,从三维形体内部观察三维形体的内壁,实现利用智能机显示屏姿态控制全景浏览。
9.控制局部坐标系中三维物体姿态的方法,其特征在于:
(1)按权利要求1所述的方法得到的智能机姿态矩阵Rg;
(2)利用智能机姿态矩阵Rg控制局部坐标系中三维物体的姿态:
在绘制三维物体之前,将Rg矩阵设定为仿真软件系统中的模型转换矩阵M44的左上角
3x3矩阵
即实现利用智能机姿态控制局部坐标系中三维物体的姿态。
智能机姿态测定及虚拟现实漫游方法\n技术领域\n[0001] 本发明涉及信息技术领域,具体涉及智能机姿态测定及虚拟现实漫游方法。\n背景技术\n[0002] 虚拟现实技术是让用户沉浸在智能机显示屏展现的虚拟或真实三维场景中,将虚拟目标标签叠加到其中,提示交互信息给用户。传统的三维虚拟场景,如数字三维城市、游戏等应用已经非常成熟,但是在三维场景里漫游却主要通过鼠标、键盘、滚动球等传统控制设备,控制设备的方向和观察到的实际场景无法直观的对应,渲染设备庞大而笨拙,这都会给操作者带来极大不便,影响了这些三维数字技术的广泛应用。因此迫切需要一种将控制设备与显示设备合二为一的非常直观轻便的智能机定姿态与渲染技术。本发明正解决了这个问题。\n[0003] 由于智能机姿态不一样,同样位置看到的现实场景不一样,智能机姿态精度影响导航精度和虚拟现实漫游仿真精度,因此智能机姿态的精确测定具有重要意义。虚拟现实应用中对智能机姿态精度提出了更高要求。传统的智能机姿态测定,主要利用方向传感器单轴航向角数据信息,系统对智能机姿态摆放有特定要求,如要求智能机平行于地面,或垂直于地面摆放,而虚拟现实应用中用户手持智能机的姿态千变万化,并不一定严格平行或者垂直于地面,这将导致导航方位不准。此外智能机姿态测定的误差将带来虚拟现实漫游误差,影响用户体验,因此迫切需要一种考虑智能机X-Y-Z三轴旋转的姿态测定算法。\n[0004] 基于位置的服务LBS日益受关注,但用户更关心的不仅是位置,而是自己与目标间的方向和距离。很多老年人和方向感不强的人很难将实际看到的生活场景与地图中的东南西北联系在一起,因此智能机任意角度摆放情况下,叠加在实景视频上的目标信息及其相关服务将给用户带来所见即所指的极大便利,将成为未来信息服务的发展新趋势,我们将这种服务称为“智能机全方位虚拟现实或增强现实信息服务”。应用包括:\n[0005] 1.为商铺以及供需双方发布相对于其他海量用户的方位和距离提供信息;\n[0006] 2.为用户相对于指定地名,指定单位的方位与距离提供可视化信息服务;\n[0007] 3.为用户之间相互联络提供方位和距离可视化信息;\n[0008] 4.为车、船、人、物流提供相对于目的地的方位和距离可视化信息。\n[0009] 5.快递、送货,用于电子商务的最终递送环节。邮递员通过智能机即可知道收货人,收件人位置,收件人通过智能机知道邮递员位置和方向。\n[0010] 6.提供一种全新三维场景、数字城市、数字地球、游戏漫游模式,不需手指触碰控制方向,而采用直观的智能机姿态控制保证渲染的地图与三维场景对应。\n[0011] 7.提供了一种全新的地图浏览查询模式,不需要用手指触碰方式,而是采用直观的智能机姿态控制保证渲染出的地图与实景对应。\n[0012] 传统的导航服务是地图导航服务,用户看到的是智能机姿态与周边实景不对应的地图,用户需要费力的去把实景与地图联想起来才能得到正确的方向。\n[0013] 传统导航服务依据经纬度网格组成的2维坐标系进行导航,地球当做经纬度组成的一个平面处理,因为相同维度差对应的距离偏移≥经度差对应的距离偏移,所以不同地区导航算法需进行经纬比例调整,只适合于中低纬度地区的小区域,不适合全球,极地附近这种方法已经无法再适用,非常不便于全球化普及。而本发明采用局部坐标系转换后能把全球任何位置的三维场景很好地展现出来。\n[0014] 传统的姿态检测技术主要用于飞机,汽车等大型设备,追求很高精度,用于军事、工业等领域,而且非常贵重和笨重,而本发明主要考虑用廉价轻便的智能机终端实现普通个人周边地区的视频信息叠加服务。\n[0015] 本发明不仅考虑方向传感器的value[0]得到的航向角,在有其他传感器,如重力加速度磁力计和陀螺仪情况下,还考虑了其他几种姿态传感器捕获到的数据,使得检测到的姿态更加精确,在没有这些传感器条件下也能得到粗略姿态。本发明可以在智能机,诸如Andriod,苹果系统上方便地实现虚拟现实漫游、地图浏览功能。\n[0016] 考虑到当前智能机传统应用的各种缺陷和不足,本发明提供一种考虑智能机3轴旋转任意姿态测定的虚拟现实或增强现实三维渲染及漫游方法,用户在三维空间中以任意姿态摆放智能机都能在视窗内观察到与该位姿对应的周边真实或虚拟三维渲染场景。由于用户手持智能机的姿态与三维场景中渲染的三维效果完全一致,用户会体验到一种极其逼真的身临其境三维效果。\n[0017] 因此基于本发明可以实现虚拟现实电子商务、虚拟现实商铺广告信息实景三维渲染发布、三维数字城市漫游,实景三维地图标注,实景三维游戏、摄影测量测绘等。同时商铺也能借助服务平台广泛发布其广告信息。\n[0018] 基于本发明可实现电子商务服务,用户客户端之间,用户客户端与商铺之间可以用视频实景预览观察相互之间的位置、方位关系,同时商铺也能借助服务平台广泛发布其广告信息。\n[0019] 本发明中智能机包括一切含显示显示屏和姿态传感的智能设备,如手机,平板电脑,笔记本电脑,带姿态传感和显示屏的摄像头,相机,智能显示器,智能电视机显示屏、以及各种可穿戴设备。\n发明内容\n[0020] 本发明所要解决的问题是提供智能机姿态测定及虚拟现实漫游方法,该方法使用户在智能机上获得便捷、直观的可视化信息。\n[0021] 本发明提供的技术方案是,智能机姿态测定及虚拟现实漫游方法,包括以下内容:\n[0022] 智能机姿态测量方法的输入输出定义\n[0023] 输入:\n[0024] 方法(1)重力加速度计传感器的三个值ax、ay、az,要求配置最低,适用性最广磁力计传感器的三个值{mx,my,mz}或方向传感器的航向角value[0]\n[0025] 方法(2)旋转矢量传感器的三个或四个输出。需旋转矢量传感器\n[0026] 方法(3)重力加速度计,磁力计和陀螺仪。另需陀螺仪输出:\n[0027] 完整描述智能机局部坐标系姿态的矩阵\n[0028] Rg矩阵是一个3x3单位正交矩阵,由三行组成,每行一个三维矢量,三个矢量分别为rgx,rgy,rgz。第一行rgx是智能机自身x轴在局部坐标系下的单位矢量;\n[0029] 第二行rgy是智能机自身y轴在局部坐标系下的单位矢量;\n[0030] 第三行rgz是智能机自身z轴在局部坐标系下的单位矢量。\n[0031] 如图1所示,智能机姿态矩阵Rg的三个行矢量rgx,rgy,rgz是其自身三轴在局部坐标系下的三个单位矢量。\n[0032] 本发明智能机姿态测定方法,包括以下步骤:\n[0033] 测定智能机姿态矩阵Rg。Rg是一个3x3单位正交矩阵,是相对于局部坐标系的,局部坐标系Z轴与重力方向一致,\n[0034] 若智能机磁力计指示方向是北,则北代表局部坐标系X轴,西代表局部坐标系Y轴;\n[0035] 若智能机磁力计指示方向是东,则东代表局部坐标系X轴,北代表局部坐标系Y轴;\n[0036] 若智能机磁力计指示方向是南,则南代表局部坐标系X轴,东代表局部坐标系Y轴;\n[0037] 若智能机磁力计指示方向是西,则西代表局部坐标系X轴,南代表局部坐标系Y轴;\n[0038] 局部坐标系的原点可以定义为位于地球上任意一点。\n[0039] Rg由下法之一获得:\n[0040] 方法(1)采用重力加速度计与磁力计\n[0041] 如果智能机有重力加速度计,且有磁力计或方向传感器,用以下公式(1)计算Rg[0042]\n[0043] 其中\n[0044]\n[0045]\n[0046] vax,vay,vaz是智能机测出来的智能机重力加速度传感器的x,y,z三个方向的值,或这三个检测值经过滤波的结果,如过程中检测到新值vax’,vay’,vaz’可采用:\n[0047] αvax’+(1-α)vax替换原来的vax\n[0048] αvay’+(1-α)vay替换原来的vay\n[0049] αvaz’+(1-α)vaz替换原来的vaz\n[0050] α是介于[0,1]之间的一个值。\n[0051] Ra是重力传感器芯片相对于智能机的姿态转换矩阵。对于大部分智能手机而言,[0052]\n[0053] 当az<0时,s=-1,az≥0时,s=1;\n[0054] 若采用方向传感器: 带入公式(1)计算Rg;\n[0055] 若采用磁力计传感器:{vmx,vmy,vmz是是智能机上磁力传感器检测到的三个值或这三个值经滤波的结果,如过程中检测到新值vmx’,vmy’,vmz’可采用:\n[0056] αmvmx’+(1-αm)vmx替换原来的vmx\n[0057] αmvmy’+(1-αm)vmy替换原来的vmy\n[0058] αmvmz’+(1-αm)vmz替换原来的vmz\n[0059] αm是介于[0,1]之间的一个值。\n[0060] 计算\n[0061]\n[0062] 其中Rm是磁力计传感器芯片相对于智能机的姿态转换矩阵。对于大部分智能手机而言,\n[0063]\n[0064] 再计算\n[0065]\n[0066] 利用磁力计计算方位角 的三角函数为:\n[0067]\n[0068]\n[0069] 带入公式(1)计算Rg\n[0070] 反复利用上述公式(1)计算Rg.\n[0071] 若既无磁力计,也无方向传感器,将方位角 角初值定为0,并当智能机需要模拟逆时针绕重力方向旋转时增加 角,需要模拟顺时针绕重力方向旋转则减小 角。\n[0072] 方法(2)用旋转矢量传感器\n[0073] 如果智能机配置有旋转矢量传感器\n[0074] 首先采用下述(a)(b)(c)中的一种方式得到Rg0矩阵\n[0075] (a)如果检测到智能机上的旋转矢量传感器只有3个数据values[0],values[1],values[2]\n[0076] 采用以下公式得到\n[0077] q1=values[0],q2=values[1],q3=values[2],\n[0078]\n[0079] 则Rg0矩阵为:\n[0080]\n[0081] (b)如果检测智能机上的旋转矢量传感器有4个数据,\n[0082] q0=values[3],q1=values[0],q2=values[1],q3=values[2]\n[0083] 则Rg0矩阵为:\n[0084] 有的版本的\n[0085] android系统需要先将{values[3],values[0],values[1],values[2]}单位化以后才能作为\n[0086] {q0,q1,q2,q3}使用。\n[0087] (c)智能机上指定传感器类型为旋转矢量类型,实时得到旋转矢量传感器的观测值\n[0088] 利用智能机上的旋转矢量转矩阵函数将传感器的观测值转换成模型转换矩阵R44,R44矩\n[0089] 阵的左上角3x3子阵是Rg0\n[0090] 然后根据智能机旋转矢量传感器坐标系定义的不同,采取以下几种情况之一得到Rg:\n[0091] 若旋转矢量传感器的X轴指向东,Y轴指向北,则\n[0092]\n[0093] 若旋转矢量传感器的X轴指向北,Y轴指向西,则\n[0094] Rg=Rg0;(3)\n[0095] 若旋转矢量传感器的X轴指向南,Y轴指向东,则\n[0096]\n[0097] 方法(3)采用陀螺仪迭代方法计算智能机姿态矩阵Rg\n[0098] 若智能机有陀螺仪,可采用以下方法迭代得到Rg矩阵:\n[0099] 第1步计算q0,q1,q2,q3的初值\n[0100] 选用上述公式(1)或(2)(3)(4)计算Rg的初值,然后利用姿态矩阵转4元素成熟技术将Rg矩阵转换成4元素q0,q1,q2,q3\n[0101] 将4元数q0,q1,q2,q3作为以下迭代计算的初值\n[0102] 第2步设定exInt,eyInt,ezInt值为0\n[0103] exInt=0,eyInt=0,ezInt=0\n[0104] 第3步根据接收到的磁力计矢量{mx,my,mz},得到正确磁场矢量{wx,wy,wz}:\n[0105] 先将矢量{mx,my,mz}替换成将其单位化以后的矢量\n得到局部坐标系下磁场的正确的磁场方向矢量{bx,0,bz}\n[0106] hx=2×mx×(0.5-q2×q2-q3×q3)+2×my×(q1×q2-q0×q3)+2×mz×(q1×q3+q0×q2);\n[0107] hy=2×mx×(q1×q2+q0×q3)+2×my×(0.5-q1×q1-q3×q3)+2×mz×(q2×q3-q0×q1);\n[0108] hz=2×mx×(q1×q3-q0×q2)+2×my×(q2×q3+q0×q1)+2×mz×(0.5-q1×q1-q2×q2);\n[0109]\n[0110] bz=hz\n[0111] 再转换到正确磁场矢量{wx,wy,wz}\n[0112] wx=2×bx×(0.5-q2×q2-q3×q3)+2×bz×(q1×q3-q0×q2);\n[0113] wy=2×bx×(q1×q2-q0×q3)+2×bz×(q0×q1+q2×q3);\n[0114] wz=2×bx×(q0×q2+q1×q3)+2×bz×(0.5-q1×q1-q2×q2);\n[0115] 第4步根据接收到的重力加速度计数据ax,ay,az,和第3步得到的正确磁场矢量{wx,wy,wz}得到误差矢量{ex,ey,ez}并修改exInt,eyInt,ezInt的值\n[0116] 先将矢量{ax,ay,az}替换成将其单位化以后的矢量\n[0117] vx=2×(q1×q3-q0×q2);\n[0118] vy=2×(q0×q1+q2×q3);\n[0119] vz=q0×q0-q1×q1-q2×q2+q3×q3;\n[0120] ex=(ay×vz-az×vy)+(my×wz-mz×wy);\n[0121] ey=(az×vx-ax×vz)+(mz×wx-mx×wz);\n[0122] ez=(ax×vy-ay×vx)+(mx×wy-my×wx);\n[0123] 计算误差累计值\n[0124] exInt替换为exInt+ex×Ki;\n[0125] eyInt替换为eyInt+ey×Ki;\n[0126] ezInt替换为ezInt+ez×Ki;\n[0127] 其中Ki为一可调节的正系数,Ki在0.00001至0.5中任意选取;\n[0128] 第5步根据误差矢量{ex,ey,ez}及其累计值将陀螺仪数据{gx0,gy0,gz0}纠正成{gx,gy,gz}\n[0129] 假设智能机读出当前的一组陀螺仪数据为{gx0,gy0,gz0}gx=gx0+Kp×ex+exInt;gy=gy0+Kp×ey+eyInt;gz=gz0+Kp×ez+ezInt;\n[0130] 其中Kp为一可调节的正系数\n[0131] Kp在0.000001至20.0中任意选取;\n[0132] 第6步根据陀螺仪数据gx,gy,gz修正四元数\n[0133] 随着不断接收到陀螺仪数据gx,gy,gz,对4元数按如下方式修正,halfT为修正周期,halfT=0.00001~10.0,\n[0134] q0替换为q0+(-q1×gx-q2×gy–q3×gz)×halfT;q1替换为q1+(q0×gx-q3×gy+q2×gz)×halfT;q2替换为q2+(q3×gx+q0×gy-q1×gz)×halfT;q3替换为q3+(-q2×gx+q1×gy+q0×gz)×halfT;\n[0135] 第7步输出4元数和Rg矩阵\n[0136] 将四元数{q0,q1,q2,q3}单位化成\n[0137] 4元数转Rg矩阵公式如下\n[0138]\n[0139] 第8步回到第3步继续接收陀螺仪运动数据更新姿态4元数q0~q3,在循环的过程中每次到第7步都能输出当前的Rg矩阵;\n[0140] 本发明测定智能机上显示屏姿态的方法:\n[0141] 定义智能机上显示屏的姿态矩阵为\n[0142]\n[0143] rx是显示屏水平方向在局部坐标系中的分量;\n[0144] ry是显示屏上下方向在局部坐标系中的分量;\n[0145] rz是垂直于显示屏表面方向向显示屏内部看的视线方向在局部坐标系中的分量。\n[0146] 包括以下步骤:\n[0147] 1)按本发明测定智能机姿态的方法,得到智能机的姿态矩阵Rg;\n[0148] 2)计算R=ΔR×Rg;得到显示屏的姿态R矩阵\n[0149] ΔR为智能机显示屏姿态矩阵R相对于智能机姿态矩阵Rg的一个固定的方向的转换,当显示屏观察方向和智能机自身Z轴方向刚好相反时 当显示屏观察\n方向和智能机自身Z轴方向完全一致时 否则可在智能机上选择一个与显示\n屏xyz三轴姿态一致的摄像头,采用成熟摄影测量后方交汇法通过摄像头精确标定ΔR。方法如下:\n[0150] 1.建立控制场坐标系,即原点位于智能机的GPS接收点或北斗定位点的局部坐标系;\n[0151] 2.用智能机摄像头拍摄控制场坐标系中的点集;按权利要求1方法测定智能机拍摄点集时的Rg,Rg也是相对于控制场坐标系定义的;\n[0152] 3.根据控制场点集中各已知点转换到控制场坐标系的3维坐标与拍摄图像中点集像坐标的对应关系,采用摄影测量后方交会方法测量出智能机摄像头相对于控制场坐标系的姿态矩阵RA和摄像头光心相对于控制场坐标系的坐标ΔT;\n[0153] 4.按下式得到ΔR=RARg-1。\n[0154] ΔT同时也是摄像头光心,近似为显示屏中心,相对于智能机GPS或北斗定位点的局部坐标系偏移;\n[0155] 通过测定该摄像头的姿态R得到虚拟现实中智能机显示屏观察姿态矩阵R。\n[0156] 本发明还提供了基于智能机姿态的虚拟现实漫游方法:\n[0157] 基于前述方法得到智能机显示屏姿态矩阵R矩阵,采用以下步骤:\n[0158] 1)采用本发明方法得到与智能机显示屏姿态一致的摄像头姿态R即为智能机显示屏姿态矩阵R\n[0159] 若无此摄像头,则当智能机自身姿态Z轴方向和智能机显示屏观察姿态方向相反时 当智能机自身姿态Z轴方向和智能机显示屏观察姿态方向一致时R=\nRg.\n[0160] 2)移动控制漫游观察者在局部坐标系中的位置\n[0161] 定义漫游观察者是在局部坐标系中的一个具备自身位置、姿态、用于观察周边场景的对象。智能机显示屏所渲染的场景就是漫游观察者在局部坐标系中所应看到的场景图像;\n[0162] 定义漫游观察者在局部坐标系中的坐标为Xd,Yd,Zd\n[0163] 用以下三种方法之一控制漫游观察者在虚拟场景中的移动:\n[0164] (1)模式1:普通2维移动\n[0165] 当用户手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,相当于局部坐标系下,Xd增加Vx=ΔXr11+ΔYr21;Yd增加Vy=ΔXr12+ΔYr22;Zd不变\n[0166] 此方法主要适合于智能机显示屏接近水平时的情况。\n[0167] (2)模式2:智能2维移动\n[0168] 当手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,采用如下方法:\n[0169] 首先选择R矩阵右侧一列中的r13,r23,r33中哪一个分量的绝对值最大,[0170] 如果|r33|最大,Xd增加Vx=ΔXr11+ΔYr21Yd增加Vy=ΔXr12+ΔYr22[0171] 如果|r23|最大,Xd增加Vx=ΔXr11+ΔYr31Yd增加Vy=ΔXr12+ΔYr32[0172] 如果|r13|最大,Xd增加Vx=ΔXr31+ΔYr21Yd增加Vy=ΔXr32+ΔYr22[0173] (3)模式3:3维漫游移动\n[0174] 因为手机显示屏只有2维,单个手指滑动只能进行2维操作,单指划过手机显示屏时ΔX,ΔY与滑动位移成正比,那么可采用用户双指滑动触碰智能机操作实现3维操作,采用双指合拢相当于ΔZ<0,双指拉开相当于ΔZ>0(或者双指合拢相当于ΔZ>0,双指拉开相当于ΔZ<0)。当智能机接收到手指控制信息{ΔX,ΔY,ΔZ}的时候,\n[0175] Xd增加Vx=ΔXr11+ΔYr21+ΔZr31Yd增加Vy=ΔXr12+ΔYr22+ΔZr32Zd增加Vz=ΔXr13+ΔYr23+ΔZr33\n[0176] 3)设置漫游观察者在局部坐标系里的位置和方向:\n[0177] 根据漫游观察者的局部坐标系坐标Xd,Yd,Zd,以及步骤1测定得到的姿态矩阵R,利用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库中用于设定虚拟观察相机位姿的图形库函数,设置漫游观察者在局部坐标系里的位置和方向:\n[0178] 需要设定以下几个量:\n[0179] 1.漫游观察者自身观察的垂直视场角θ,就是智能机显示屏上边缘中点的视线方向与下边缘中点的视线方向的夹角。通常可选取θ=45度.\n[0180] 2漫游观察者所在的位置Xd,Yd,Zd,由步骤2漫游算法修改;\n[0181] 3.漫游者观察方向{r31,r32r33}或者用户注视点坐标(Xd+r31,Yd+r32,Zd+r33)[0182] 4.漫游者自身向上方向的矢量{-r21,-r22,-r23}\n[0183] 其中rij是智能机显示屏姿态R矩阵中的第i行j列\n[0184] 比如在Android OpenES中采用\n[0185] GLU.gluLookAt(gl,(float)Xd,Yd,Zd,\n[0186] Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23);\n[0187] 其中rij是R矩阵第i行j列的元素值\n[0188] 编程实现设置漫游观察者位置和姿态\n[0189] 4)在局部坐标系下渲染绘制三维场景\n[0190] 预先在智能机的可视显示屏内设置一个3维渲染图层进行三维场景渲染,可视窗口内预先叠加视频或地图图层;\n[0191] 这里被绘制的三维场景中的点、线、面和物体模型的几何坐标都要转换成局部坐标系下的坐标[Xi Yi Zi]T,即与漫游者的坐标Xd,Yd,Zd在同一个局部坐标系下;用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库实现局部坐标系下的三维绘图。\n[0192] 在上述步骤4)中,在局部坐标系中绘制一个标有广告符号、文字的纹理多边形面或模型定义为广告牌。将广告牌的实际地理坐标转换到局部坐标系,再按如下三种方法渲染绘制都可使得广告牌的正面始终正对着漫游观察者。\n[0193] 方法1\n[0194] (a)假设商铺广告牌的局部坐标系坐标在Xi Yi Zi,按如下方法设置模型绘制转换矩阵:\n[0195]\n[0196]\n[0197] 将m设定为模型转换矩阵。\n[0198] (b)在y-z平面上绘图即可让广告牌永远正对智能机方向\n[0199] 方法2\n[0200] (a)假设商铺广告牌的局部坐标系坐标在Xi Yi Zi,按如下方法设置模型绘制转换矩阵:\n[0201]\n[0202] 将m设定为模型转换矩阵。\n[0203] (b)在x-z平面上绘图即可让广告牌永远正对智能机方向方法(1)(2)绘制出来的广告牌都具有近大远小的立体效果。\n[0204] 方法3\n[0205] (a)假设商铺广告牌的局部坐标系坐标在Xi Yi Zi,按如下方法设置模型绘制转换矩阵:\n[0206]\n[0207] 将m设定为模型转换矩阵。\n[0208] (b)在x-z平面上绘图即可让广告牌永远正对智能机方向\n[0209] 这样绘制出来的广告牌将不具有近大远小的效果,远近一样大,方便用户观察。\n[0210] 上述渲染的商铺信息内容包括名称、符号属性、类别、与智能机的距离、角度和/或高度。\n[0211] 根据智能机的真实地理坐标进行虚拟现实漫游:\n[0212] 本发明设定局部坐标系原点是智能机显示屏中心,即Xd,Yd,Zd是相对于智能机显示屏中心的局部偏移坐标,步骤4)之前增加如下操作:\n[0213] (a)获取智能机的高度hs,纬度θs和经度\n[0214] θs是智能机的纬度, 是智能机的经度,由智能机上自带的GPS接受模块获取;\n[0215] (b)计算智能机所在经纬度的Rv\n[0216]\n[0217] (c)计算智能机所在纬度θs经度 高度hs的地心坐标系坐标Ts\n[0218] 利用大地测量学中经典的转换公式。\n[0219]\n[0220] 其中\n[0221] hs是智能机离地面高度\n[0222] Ns是随纬度变化的卯酉圈曲率半径。\n[0223]\n[0224] a,b是地球椭球的长短轴,是大地测量学中的已知常量;\n[0225] e是偏心率,是定值。\n[0226] (d)根据地球上任何一个点的经度 纬度θi和高程hi得到该点地心坐标系坐标T0i=[X0i Y0i Z0i]T\n[0227] 利用大地测量学中经典的转换公式\n[0228]\n[0229] 其中\n[0230] hi是点离地面高度\n[0231] Ni是随纬度变化的卯酉圈曲率半径。\n[0232]\n[0233] a,b是地球椭球的长短轴,是大地测量学中的已知常量;\n[0234] e是偏心率,是定值。\n[0235] 如果已知一个物体所在经纬度 和θi,通过本步骤计算出它的地心坐标系坐标T0i[0236] (e)地心坐标系坐标T0i转换为局部坐标系中的坐标(Xi Yi Zi)T\n[0237]\n[0238] ΔT是智能机显示屏中心相对于智能机GPS接收天线的局部坐标系偏移。这样保证了权利要求3中的(Xi Yi Zi)T和(Xd Yd Zd)T都是相对于智能机显示屏中心的偏移坐标。可近似取ΔT=[0 0 0]T\n[0239] 权利要求3中步骤4)中绘制三维场景须用这种转换为局部坐标系中的坐标(Xi Yi Zi)T。\n[0240] 在基于智能机姿态的虚拟现实漫游方法步骤2)中设置加速度模拟漫游效果:\n[0241] 步骤2)中如果需要模拟加速度漫游移动特效,当手指滑动的时候,根据手指滑动速度大小给予一个初速度{Vx,Vy,Vz},Xd,Yd,Zd将不停地增加速度分量Vx,Vy,Vz,然后让速度分量Vx,Vy,Vz随时间推移不断衰减,其中VZ在权利要求3步骤2)模式1,2情况下恒等于零。\n[0242] 让速度体现到局部坐标系下的漫游位移\n[0243] Xd增加Vx\n[0244] Yd增加Vy\n[0245] Zd增加Vz仅用于权利要求3步骤2)模式3\n[0246] 最后要在不停的移动过程中速度大小不断衰减,\n[0247] Vx,Vy,Vz不停地衰减:可采用以下两种方法:\n[0248] 1)运动过程中Vx,Vy,Vz自身分别不断地乘以k=0.1~0.9999进行衰减,[0249] 运动过程中Vx自身不断地乘以k,直到Vx减小为0为止;\n[0250] 运动过程中Vy自身不断地乘以k,直到Vy减小为0为止;\n[0251] 运动过程中Vz自身不断地乘以k,直到Vz减小为0为止;\n[0252] 或者\n[0253] 2)运动过程中Vx,Vy,Vz自身分别不断地进行以下增量操作\n[0254] Vx自身不断地增加-Vx*k,直到Vx减小为0为止;\n[0255] Vy自身不断地增加-Vy*k,直到Vy减小为0为止;\n[0256] Vz自身不断地增加-Vz*k,直到Vz减小为0为止;\n[0257] 其中k=0.0001~0.5\n[0258] 以上过程不断循环即可实现局部加速度漫游效果。\n[0259] 本发明还涉及虚拟现实场景中的2维标签的恒水平于地面的显示方法:\n[0260] 2维标签是指2维文字、图符、图片、标记、编码、对话框、编辑框、列表框等一切在智能机显示屏中以2维形式显示的对象。\n[0261] 因用户双眼是水平于地面的,前述基于智能机姿态的虚拟现实漫游方法只能保证\n3维物体能正确显示,2维标签的显示姿态会随智能机旋转而旋转,用户看到的标签就不是正放的。故设计本方法使得标签始终正放显示。方法不局限于矩形显示屏,对常用矩形显示屏而言,采用以下方法。\n[0262] 在前述基于智能机姿态的虚拟现实漫游方法步骤3和步骤4)之间或步骤4)结束之后,将显示屏设定为2维绘图模式并设置若干个2维标签,针对每一个2维标签,按如下步骤显示:\n[0263] 步骤1)首先确定虚拟现实场景中2维标签的中心位置u,v;\n[0264] 如果标签用于标注三维场景中局部坐标系坐标为(X,Y,Z)的目标,则根据以下公式确定目标显示的中心位置u,v\n[0265] ZO=r31(X-Xd)+r32(Y-Yd)+r33(Z-Zd)\n[0266]\n[0267] 式中:\n[0268] w是智能机显示屏宽度,h是智能机显示屏高度。\n[0269] r11~r33是权利要求2所述的方法中的R矩阵对应行列的元素。\n[0270] θ是垂直视场角θ\n[0271] Xd,Yd,Zd是漫游观察者在局部坐标系中的坐标。\n[0272] 如果满足ZO>0且00则将[u v]替换为点(w/2,h/2)到(u,v)的连线与显示屏边缘相交的2维点。\n[0278] 若ZO<0则将[u v]替换为点(u,v)到(w/2,h/2)的延长线与显示屏边缘相交的2维点。\n[0279] 如果标签不是用于标注目标,u,v为界面设计者设定的显示屏坐标,或是用户手指或鼠标点击的显示屏坐标。\n[0280] 步骤2)计算矢量{Qx,Qy}\n[0281] 方法(1)Qx=-r23/La Qy=r13/La\n[0282] 其中r23,r13是权利要求2所述的方法中的R矩阵对应行列的元素,\n[0283]\n[0284] 方法(2)利用权利要求1方法(1)所述加速度计的前两个输出值ax,ay得到[0285]\n[0286] 步骤3)在2维平面上经过以下矩阵旋转变换以后再绘制2维标签:\n[0287]\n[0288] 2维标签上每一点X,经过上式变换到坐标X’显示出来。\n[0289] ±取+是正放显示,取-是倒放显示,标签的水平轴始终平行于地面。\n[0290] 就会看到显示屏上该显示对象自身的水平轴始终平行于地平面,标签始终处于正放状态。\n[0291] 在基于智能机姿态的虚拟现实漫游方法的步骤4)中所述三维场景为一个空心的三维形体,三维形体可以是球,立方体、柱体、正多面体、锥体,三维形体的内壁以全景图作为纹理进行渲染。所述漫游观察者在虚拟场景中位于三维形体内部的某一固定点[Xd,Yd,Zd]=[0,0,0],一般位于三维形体中心,从三维形体内部观察三维形体的内壁纹理,实现利用智能机显示屏姿态R矩阵控制全景浏览。\n[0292] 本发明进一步提供了控制局部坐标系中三维物体姿态的方法:\n[0293] 将Rg矩阵设定为仿真软件系统中的模型转换矩阵M的左上角3x3矩阵[0294] 这实现了利用智能机姿态控制三维场景中某一物体的姿态。\n附图说明\n[0295] 图1为智能机姿态矩阵R的三个行矢量rgx,rgy,rgz在局部坐标系中的所指的矢量方向。\n具体实施方式\n[0296] 本发明针对3种方法需要智能机的3种配置类型的传感器输入\n[0297] 方法(1)用以下公式 计算Rg\n[0298] 其中\n[0299]\n[0300]\n[0301]\n[0302] 利用磁力计计算方位角 的三角函数为:\n[0303]\n[0304]\n[0305] 在实际操作中,若出现地磁偏角 导致磁力方向不是指着正北,可通过下式计算Rg\n[0306]\n[0307]\n[0308]\n[0309] 重力加速度计传感器的三个值{vax,vay,vaz}要求配置最低,适用性最广;\n[0310] 磁力计传感器的三个值{vmx,vmy,vmz}或方向传感器的航向角value[0][0311] 若既无磁力计,也无方向传感器,方位角 角可通过用户界面滑块控制增减 角。\n往地心看绕重力方向,模拟逆时针旋转时 角增加,模拟顺时针旋转时 角减小。\n[0312] 方法(2)旋转矢量传感器的三个或四个输出,需旋转矢量传感器。\n[0313] 方法(3)重力加速度计,磁力计和陀螺仪,另需陀螺仪。\n[0314] 计算过程中,很多变量如L和 可以预存下来,避免重复计算,以提高速度。\n[0315] 本发明输出矩阵Rg的几何意义如下\n[0316] 完整描述智能机局部坐标系姿态的矩阵\n[0317] Rg矩阵是一个3x3单位正交矩阵,由三行组成,每行一个三维矢量,三个矢量分别为rgx,rgy,rgz。第一行rgx是智能机自身x轴在局部坐标系下的单位矢量;\n[0318] 第二行rgy是智能机自身y轴在局部坐标系下的单位矢量;\n[0319] 第三行rgz是智能机自身z轴在局部坐标系下的单位矢量。\n[0320] 如图1所示,智能机姿态矩阵Rg的三个行矢量rgx,rgy,rgz是其自身三轴在局部坐标系下的三个单位矢量。(1)智能机显示屏的姿态测定方法中,\n[0321] 显示屏观察方向和智能机自身Z轴方向刚好相反时 显示屏观察\n方向和智能机自身Z轴方向完全一致时 否则可在智能机上选择一个与显示\n屏观察方向一致的摄像头,该摄像头的拍摄方向一定与观察显示屏的方向一致,通过摄影测量后方交汇法测定该摄像头的局部坐标系姿态RA以及对应的智能机姿态矩阵Rg,采用ΔR=RARg-1精确标定摄像头。\n[0322] 因ΔR描述了显示屏观察姿态和智能机自身姿态之间的固定转换关系,一旦精确测定以后,就是一个恒定值。任意给定Rg就可得到对应的显示屏姿态R=ΔRRg。\n[0323] 基于智能机姿态的虚拟现实漫游描述的方法可用于与地理位置无关的虚拟现实漫游领域,如非实景地形游戏,体感游戏、三维虚拟数据仿真,虚拟全景等领域;\n[0324] 用户可采用实际旋转智能机的方式操控智能机姿态,所对准的方向和姿态在虚拟现实场景中观察的内容与其显示屏上显示的是对应的,采用手指滑动方式操纵控制在虚拟现实中平移。\n[0325] 基于智能机姿态的虚拟现实漫游步骤3的具体实施方式如下,\n[0326] 将显示屏设定为3维绘图模式可采用android系统中以下OpenES语句编程实现:\n[0327] gl.glMatrixMode(GL10.GL_PROJECTION);//开始设置投影矩阵\n[0328] gl.glLoadIdentity();//下面转换成二维平面信息绘制模式\n[0329] GLU.gluPerspective(gl,θ,屏宽/屏高,0.01,(float)1000000);可选取θ=45度[0330] 在Android OpenES中采用\n[0331] GLU.gluLookAt(gl,Xd,Yd,Zd,\n[0332] Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23);\n[0333] 在OpenGL里可采用以下语句实现\n[0334] gluLookAt(Xd,Yd,Zd,Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23)\n[0335] 其中rij是R矩阵第i行j列的元素值\n[0336] 编程实现设置漫游观察者位置和姿态\n[0337] 广告牌渲染效果通过如下方法实现:\n[0338] ΔXi=Xi-XdΔYi=Yi-Yd\n[0339] 以上方法可采用OpenGL中的\n[0340] m[16]={-ΔYi,ΔXi,0,0,ΔXi,ΔYi,0,0,0,0,L,0,Xi,Yi,Zi,1}[0341] glMultMatrixf(m,0);语句编程实现\n[0342] 或\n[0343] OpenES中的\n[0344] m[16]={-ΔYi,ΔXi,0,0,ΔXi,ΔYi,0,0,0,0,L,0,Xi,Yi,Zi,1}[0345] gl.glMultMatrixf(m,0);语句编程实现\n[0346] 根据智能机的真实地理坐标进行虚拟现实漫游中描述的方法可用于与地理位置有关的应用,如地图漫游,数字城市、飞行模拟三维漫游。在没有高程数据的情况下可以直接将图片绑定成纹理绘制在X,Y平面上,有高程信息条件下,可结合高程信息在虚拟现实XYZ空间中绘制出三维网格地形,实现智能机姿态结合手指滑动控制地图漫游。\n[0347] 漫游加速度模拟中可在软件中将Vx,Vy,Vz的衰减计算过程放在渲染线程中计算,也可以单独用一个线程处理。\n[0348] 智能机显示屏恒水平显示是指不论怎样绕X,Y,Z三轴任意转动智能机,智能机显示屏上2维标签自身的水平轴始终平行于地平面。\n[0349] 可将要显示的2维标签中的文字、标签,对话框等作为纹理绑定到内存。渲染的时候将此纹理渲染在经过\n[0350]\n[0351] 变换的多边形上。\n[0352] 因用户的双眼是平行于地平面的,所以不论智能显示器怎么旋转,其上显示的2维标签总能给观众一个正确的姿态显示效果。\n[0353] 可通过glMultMatrix(m);实现\n[0354] 其中\n[0355] 实现;\n[0356] 也可先Translatef(u,v,0),然后glMultMatrix(m);实现\n[0357] 其中\n[0358] 接着智能机姿态的虚拟现实漫游方法步骤4)之后,\n[0359] 将显示屏设定为2维绘图模式可采用android系统中的以下OpenES语句编程实现:\n[0360] gl.glLoadIdentity();//下面转换成二维平面信息绘制模式\n[0361] gl.glViewport(0,0,A_Main.screenWidth,A_Main.screenHeight);\n[0362] gl.glMatrixMode(GL10.GL_PROJECTION);//开始设置投影矩阵\n[0363] gl.glLoadIdentity();//下面转换成二维平面信息绘制模式\n[0364] gl.glOrthof(0,A_Main.screenWidth,A_Main.screenHeight,0,-100,100);\n[0365] gl.glMatrixMode(GL10.GL_MODELVIEW);//开始设置模型绘制矩阵[0366] 全景浏览方法中的三维形体一般采用球,立方体,正多面体这样的对称形状,漫游观察者一般位于对称体内部中心点。可采用ALPHA检测技术对球面纹理进行渲染。\n[0367] 控制局部坐标系中三维物体姿态的方法中可以用智能机姿态或者智能机显示屏姿态操纵物体,如果是智能机姿态操纵,采用矩阵Rg计算;如果是智能机显示屏姿态操纵,采用矩阵R计算。\n[0368] 应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。