发明内容
本发明所要解决的问题是提供智能机姿态测定及虚拟现实漫游方法,该方法使用户在智能机上获得便捷、直观的可视化信息。
本发明提供的技术方案是,智能机姿态测定及虚拟现实漫游方法,包括以下内容:
智能机姿态测量方法的输入输出定义
输入:
方法(1)重力加速度计传感器的三个值ax、ay、az,要求配置最低,适用性最广磁力计传感器的三个值{mx,my,mz}或方向传感器的航向角value[0]
方法(2)旋转矢量传感器的三个或四个输出。需旋转矢量传感器
方法(3)重力加速度计,磁力计和陀螺仪。另需陀螺仪输出:
完整描述智能机局部坐标系姿态的矩阵
Rg矩阵是一个3x3单位正交矩阵,由三行组成,每行一个三维矢量,三个矢量分别为rgx,rgy,rgz。第一行rgx是智能机自身x轴在局部坐标系下的单位矢量;
第二行rgy是智能机自身y轴在局部坐标系下的单位矢量;
第三行rgz是智能机自身z轴在局部坐标系下的单位矢量。
如图1所示,智能机姿态矩阵Rg的三个行矢量rgx,rgy,rgz是其自身三轴在局部坐标系下的三个单位矢量。
本发明智能机姿态测定方法,包括以下步骤:
测定智能机姿态矩阵Rg。Rg是一个3x3单位正交矩阵,是相对于局部坐标系的,局部坐标系Z轴与重力方向一致,
若智能机磁力计指示方向是北,则北代表局部坐标系X轴,西代表局部坐标系Y轴;
若智能机磁力计指示方向是东,则东代表局部坐标系X轴,北代表局部坐标系Y轴;
若智能机磁力计指示方向是南,则南代表局部坐标系X轴,东代表局部坐标系Y轴;
若智能机磁力计指示方向是西,则西代表局部坐标系X轴,南代表局部坐标系Y轴;
局部坐标系的原点可以定义为位于地球上任意一点。
Rg由下法之一获得:
方法(1)采用重力加速度计与磁力计
如果智能机有重力加速度计,且有磁力计或方向传感器,用以下公式(1)计算Rg
其中
vax,vay,vaz是智能机测出来的智能机重力加速度传感器的x,y,z三个方向的值,或这三个检测值经过滤波的结果,如过程中检测到新值vax’,vay’,vaz’可采用:
αvax’+(1-α)vax替换原来的vax
αvay’+(1-α)vay替换原来的vay
αvaz’+(1-α)vaz替换原来的vaz
α是介于[0,1]之间的一个值。
Ra是重力传感器芯片相对于智能机的姿态转换矩阵。对于大部分智能手机而言,
当az<0时,s=-1,az≥0时,s=1;
若采用方向传感器:带入公式(1)计算Rg;
若采用磁力计传感器:{vmx,vmy,vmz是是智能机上磁力传感器检测到的三个值或这三个值经滤波的结果,如过程中检测到新值vmx’,vmy’,vmz’可采用:
αmvmx’+(1-αm)vmx替换原来的vmx
αmvmy’+(1-αm)vmy替换原来的vmy
αmvmz’+(1-αm)vmz替换原来的vmz
αm是介于[0,1]之间的一个值。
计算
其中Rm是磁力计传感器芯片相对于智能机的姿态转换矩阵。对于大部分智能手机而言,
再计算
利用磁力计计算方位角的三角函数为:
带入公式(1)计算Rg
反复利用上述公式(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矩阵为:
有的版本的
android系统需要先将{values[3],values[0],values[1],values[2]}单位化以后才能作为
{q0,q1,q2,q3}使用。
(c)智能机上指定传感器类型为旋转矢量类型,实时得到旋转矢量传感器的观测值
利用智能机上的旋转矢量转矩阵函数将传感器的观测值转换成模型转换矩阵R44,R44矩
阵的左上角3x3子阵是Rg0
然后根据智能机旋转矢量传感器坐标系定义的不同,采取以下几种情况之一得到Rg:
若旋转矢量传感器的X轴指向东,Y轴指向北,则
若旋转矢量传感器的X轴指向北,Y轴指向西,则
Rg=Rg0;(3)
若旋转矢量传感器的X轴指向南,Y轴指向东,则
方法(3)采用陀螺仪迭代方法计算智能机姿态矩阵Rg
若智能机有陀螺仪,可采用以下方法迭代得到Rg矩阵:
第1步计算q0,q1,q2,q3的初值
选用上述公式(1)或(2)(3)(4)计算Rg的初值,然后利用姿态矩阵转4元素成熟技术将Rg矩阵转换成4元素q0,q1,q2,q3
将4元数q0,q1,q2,q3作为以下迭代计算的初值
第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,和第3步得到的正确磁场矢量{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}纠正成{gx,gy,gz}
假设智能机读出当前的一组陀螺仪数据为{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步输出4元数和Rg矩阵
将四元数{q0,q1,q2,q3}单位化成
4元数转Rg矩阵公式如下
第8步回到第3步继续接收陀螺仪运动数据更新姿态4元数q0~q3,在循环的过程中每次到第7步都能输出当前的Rg矩阵;
本发明测定智能机上显示屏姿态的方法:
定义智能机上显示屏的姿态矩阵为
rx是显示屏水平方向在局部坐标系中的分量;
ry是显示屏上下方向在局部坐标系中的分量;
rz是垂直于显示屏表面方向向显示屏内部看的视线方向在局部坐标系中的分量。
包括以下步骤:
1)按本发明测定智能机姿态的方法,得到智能机的姿态矩阵Rg;
2)计算R=ΔR×Rg;得到显示屏的姿态R矩阵
ΔR为智能机显示屏姿态矩阵R相对于智能机姿态矩阵Rg的一个固定的方向的转换,当显示屏观察方向和智能机自身Z轴方向刚好相反时当显示屏观察方向和智能机自身Z轴方向完全一致时否则可在智能机上选择一个与显示屏xyz三轴姿态一致的摄像头,采用成熟摄影测量后方交汇法通过摄像头精确标定ΔR。方法如下:
1.建立控制场坐标系,即原点位于智能机的GPS接收点或北斗定位点的局部坐标系;
2.用智能机摄像头拍摄控制场坐标系中的点集;按权利要求1方法测定智能机拍摄点集时的Rg,Rg也是相对于控制场坐标系定义的;
3.根据控制场点集中各已知点转换到控制场坐标系的3维坐标与拍摄图像中点集像坐标的对应关系,采用摄影测量后方交会方法测量出智能机摄像头相对于控制场坐标系的姿态矩阵RA和摄像头光心相对于控制场坐标系的坐标ΔT;
4.按下式得到ΔR=RARg -1。
ΔT同时也是摄像头光心,近似为显示屏中心,相对于智能机GPS或北斗定位点的局部坐标系偏移;
通过测定该摄像头的姿态R得到虚拟现实中智能机显示屏观察姿态矩阵R。
本发明还提供了基于智能机姿态的虚拟现实漫游方法:
基于前述方法得到智能机显示屏姿态矩阵R矩阵,采用以下步骤:
1)采用本发明方法得到与智能机显示屏姿态一致的摄像头姿态R即为智能机显示屏姿态矩阵R
若无此摄像头,则当智能机自身姿态Z轴方向和智能机显示屏观察姿态方向相反时当智能机自身姿态Z轴方向和智能机显示屏观察姿态方向一致时R=Rg.
2)移动控制漫游观察者在局部坐标系中的位置
定义漫游观察者是在局部坐标系中的一个具备自身位置、姿态、用于观察周边场景的对象。智能机显示屏所渲染的场景就是漫游观察者在局部坐标系中所应看到的场景图像;
定义漫游观察者在局部坐标系中的坐标为Xd,Yd,Zd
用以下三种方法之一控制漫游观察者在虚拟场景中的移动:
(1)模式1:普通2维移动
当用户手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,相当于局部坐标系下,Xd增加Vx=ΔXr11+ΔYr21;Yd增加Vy=ΔXr12+ΔYr22;Zd不变
此方法主要适合于智能机显示屏接近水平时的情况。
(2)模式2:智能2维移动
当手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,采用如下方法:
首先选择R矩阵右侧一列中的r13,r23,r33中哪一个分量的绝对值最大,
如果|r33|最大,Xd增加Vx=ΔXr11+ΔYr21Yd增加Vy=ΔXr12+ΔYr22
如果|r23|最大,Xd增加Vx=ΔXr11+ΔYr31Yd增加Vy=ΔXr12+ΔYr32
如果|r13|最大,Xd增加Vx=ΔXr31+ΔYr21Yd增加Vy=ΔXr32+ΔYr22
(3)模式3:3维漫游移动
因为手机显示屏只有2维,单个手指滑动只能进行2维操作,单指划过手机显示屏时ΔX,ΔY与滑动位移成正比,那么可采用用户双指滑动触碰智能机操作实现3维操作,采用双指合拢相当于ΔZ<0,双指拉开相当于ΔZ>0(或者双指合拢相当于ΔZ>0,双指拉开相当于ΔZ<0)。当智能机接收到手指控制信息{ΔX,ΔY,ΔZ}的时候,
Xd增加Vx=ΔXr11+ΔYr21+ΔZr31Yd增加Vy=ΔXr12+ΔYr22+ΔZr32Zd增加Vz=ΔXr13+ΔYr23+ΔZr33
3)设置漫游观察者在局部坐标系里的位置和方向:
根据漫游观察者的局部坐标系坐标Xd,Yd,Zd,以及步骤1测定得到的姿态矩阵R,利用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库中用于设定虚拟观察相机位姿的图形库函数,设置漫游观察者在局部坐标系里的位置和方向:
需要设定以下几个量:
1.漫游观察者自身观察的垂直视场角θ,就是智能机显示屏上边缘中点的视线方向与下边缘中点的视线方向的夹角。通常可选取θ=45度.
2漫游观察者所在的位置Xd,Yd,Zd,由步骤2漫游算法修改;
3.漫游者观察方向{r31,r32r33}或者用户注视点坐标(Xd+r31,Yd+r32,Zd+r33)
4.漫游者自身向上方向的矢量{-r21,-r22,-r23}
其中rij是智能机显示屏姿态R矩阵中的第i行j列
比如在Android OpenES中采用
GLU.gluLookAt(gl,(float)Xd,Yd,Zd,
Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23);
其中rij是R矩阵第i行j列的元素值
编程实现设置漫游观察者位置和姿态
4)在局部坐标系下渲染绘制三维场景
预先在智能机的可视显示屏内设置一个3维渲染图层进行三维场景渲染,可视窗口内预先叠加视频或地图图层;
这里被绘制的三维场景中的点、线、面和物体模型的几何坐标都要转换成局部坐标系下的坐标[Xi Yi Zi]T,即与漫游者的坐标Xd,Yd,Zd在同一个局部坐标系下;用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库实现局部坐标系下的三维绘图。
在上述步骤4)中,在局部坐标系中绘制一个标有广告符号、文字的纹理多边形面或模型定义为广告牌。将广告牌的实际地理坐标转换到局部坐标系,再按如下三种方法渲染绘制都可使得广告牌的正面始终正对着漫游观察者。
方法1
(a)假设商铺广告牌的局部坐标系坐标在Xi Yi Zi,按如下方法设置模型绘制转换矩阵:
将m设定为模型转换矩阵。
(b)在y-z平面上绘图即可让广告牌永远正对智能机方向
方法2
(a)假设商铺广告牌的局部坐标系坐标在Xi Yi Zi,按如下方法设置模型绘制转换矩阵:
将m设定为模型转换矩阵。
(b)在x-z平面上绘图即可让广告牌永远正对智能机方向方法(1)(2)绘制出来的广告牌都具有近大远小的立体效果。
方法3
(a)假设商铺广告牌的局部坐标系坐标在Xi Yi Zi,按如下方法设置模型绘制转换矩阵:
将m设定为模型转换矩阵。
(b)在x-z平面上绘图即可让广告牌永远正对智能机方向
这样绘制出来的广告牌将不具有近大远小的效果,远近一样大,方便用户观察。
上述渲染的商铺信息内容包括名称、符号属性、类别、与智能机的距离、角度和/或高度。
根据智能机的真实地理坐标进行虚拟现实漫游:
本发明设定局部坐标系原点是智能机显示屏中心,即Xd,Yd,Zd是相对于智能机显示屏中心的局部偏移坐标,步骤4)之前增加如下操作:
(a)获取智能机的高度hs,纬度θs和经度
θs是智能机的纬度,是智能机的经度,由智能机上自带的GPS接受模块获取;
(b)计算智能机所在经纬度的Rv
(c)计算智能机所在纬度θs经度高度hs的地心坐标系坐标Ts
利用大地测量学中经典的转换公式。
其中
hs是智能机离地面高度
Ns是随纬度变化的卯酉圈曲率半径。
a,b是地球椭球的长短轴,是大地测量学中的已知常量;
e是偏心率,是定值。
(d)根据地球上任何一个点的经度纬度θi和高程hi得到该点地心坐标系坐标T0i=[X0i Y0i Z0i]T
利用大地测量学中经典的转换公式
其中
hi是点离地面高度
Ni是随纬度变化的卯酉圈曲率半径。
a,b是地球椭球的长短轴,是大地测量学中的已知常量;
e是偏心率,是定值。
如果已知一个物体所在经纬度和θi,通过本步骤计算出它的地心坐标系坐标T0i
(e)地心坐标系坐标T0i转换为局部坐标系中的坐标(Xi Yi Zi)T
ΔT是智能机显示屏中心相对于智能机GPS接收天线的局部坐标系偏移。这样保证了权利要求3中的(Xi Yi Zi)T和(Xd Yd Zd)T都是相对于智能机显示屏中心的偏移坐标。可近似取ΔT=[0 0 0]T
权利要求3中步骤4)中绘制三维场景须用这种转换为局部坐标系中的坐标(Xi YiZi)T。
在基于智能机姿态的虚拟现实漫游方法步骤2)中设置加速度模拟漫游效果:
步骤2)中如果需要模拟加速度漫游移动特效,当手指滑动的时候,根据手指滑动速度大小给予一个初速度{Vx,Vy,Vz},Xd,Yd,Zd将不停地增加速度分量Vx,Vy,Vz,然后让速度分量Vx,Vy,Vz随时间推移不断衰减,其中VZ在权利要求3步骤2)模式1,2情况下恒等于零。
让速度体现到局部坐标系下的漫游位移
Xd增加Vx
Yd增加Vy
Zd增加Vz仅用于权利要求3步骤2)模式3
最后要在不停的移动过程中速度大小不断衰减,
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
以上过程不断循环即可实现局部加速度漫游效果。
本发明还涉及虚拟现实场景中的2维标签的恒水平于地面的显示方法:
2维标签是指2维文字、图符、图片、标记、编码、对话框、编辑框、列表框等一切在智能机显示屏中以2维形式显示的对象。
因用户双眼是水平于地面的,前述基于智能机姿态的虚拟现实漫游方法只能保证3维物体能正确显示,2维标签的显示姿态会随智能机旋转而旋转,用户看到的标签就不是正放的。故设计本方法使得标签始终正放显示。方法不局限于矩形显示屏,对常用矩形显示屏而言,采用以下方法。
在前述基于智能机姿态的虚拟现实漫游方法步骤3和步骤4)之间或步骤4)结束之后,将显示屏设定为2维绘图模式并设置若干个2维标签,针对每一个2维标签,按如下步骤显示:
步骤1)首先确定虚拟现实场景中2维标签的中心位置u,v;
如果标签用于标注三维场景中局部坐标系坐标为(X,Y,Z)的目标,则根据以下公式确定目标显示的中心位置u,v
ZO=r31(X-Xd)+r32(Y-Yd)+r33(Z-Zd)
式中:
w是智能机显示屏宽度,h是智能机显示屏高度。
r11~r33是权利要求2所述的方法中的R矩阵对应行列的元素。
θ是垂直视场角θ
Xd,Yd,Zd是漫游观察者在局部坐标系中的坐标。
如果满足ZO>0且0<u<w且0<v<h则u,v保持不变,
否则需要按下法修正u,v
若ZO=0则将[u v]替换为从点(w/2,h/2)出发
按矢量{r11(X-Xd)+r12(Y-Yd)+r13(Z-Zd),r21(X-Xd)+r22(Y-Yd)+r23(Z-Zd)}
方向的射线与显示屏边缘相交的2维点。
若ZO>0则将[u v]替换为点(w/2,h/2)到(u,v)的连线与显示屏边缘相交的2维点。
若ZO<0则将[u v]替换为点(u,v)到(w/2,h/2)的延长线与显示屏边缘相交的2维点。
如果标签不是用于标注目标,u,v为界面设计者设定的显示屏坐标,或是用户手指或鼠标点击的显示屏坐标。
步骤2)计算矢量{Qx,Qy}
方法(1)Qx=-r23/La Qy=r13/La
其中r23,r13是权利要求2所述的方法中的R矩阵对应行列的元素,
方法(2)利用权利要求1方法(1)所述加速度计的前两个输出值ax,ay得到
步骤3)在2维平面上经过以下矩阵旋转变换以后再绘制2维标签:
2维标签上每一点X,经过上式变换到坐标X’显示出来。
±取+是正放显示,取-是倒放显示,标签的水平轴始终平行于地面。
就会看到显示屏上该显示对象自身的水平轴始终平行于地平面,标签始终处于正放状态。
在基于智能机姿态的虚拟现实漫游方法的步骤4)中所述三维场景为一个空心的三维形体,三维形体可以是球,立方体、柱体、正多面体、锥体,三维形体的内壁以全景图作为纹理进行渲染。所述漫游观察者在虚拟场景中位于三维形体内部的某一固定点[Xd,Yd,Zd]=[0,0,0],一般位于三维形体中心,从三维形体内部观察三维形体的内壁纹理,实现利用智能机显示屏姿态R矩阵控制全景浏览。
本发明进一步提供了控制局部坐标系中三维物体姿态的方法:
将Rg矩阵设定为仿真软件系统中的模型转换矩阵M的左上角3x3矩阵
这实现了利用智能机姿态控制三维场景中某一物体的姿态。
具体实施方式
本发明针对3种方法需要智能机的3种配置类型的传感器输入
方法(1)用以下公式计算Rg
其中
利用磁力计计算方位角的三角函数为:
在实际操作中,若出现地磁偏角导致磁力方向不是指着正北,可通过下式计算Rg
重力加速度计传感器的三个值{vax,vay,vaz}要求配置最低,适用性最广;
磁力计传感器的三个值{vmx,vmy,vmz}或方向传感器的航向角value[0]
若既无磁力计,也无方向传感器,方位角角可通过用户界面滑块控制增减角。往地心看绕重力方向,模拟逆时针旋转时角增加,模拟顺时针旋转时角减小。
方法(2)旋转矢量传感器的三个或四个输出,需旋转矢量传感器。
方法(3)重力加速度计,磁力计和陀螺仪,另需陀螺仪。
计算过程中,很多变量如L和可以预存下来,避免重复计算,以提高速度。
本发明输出矩阵Rg的几何意义如下
完整描述智能机局部坐标系姿态的矩阵
Rg矩阵是一个3x3单位正交矩阵,由三行组成,每行一个三维矢量,三个矢量分别为rgx,rgy,rgz。第一行rgx是智能机自身x轴在局部坐标系下的单位矢量;
第二行rgy是智能机自身y轴在局部坐标系下的单位矢量;
第三行rgz是智能机自身z轴在局部坐标系下的单位矢量。
如图1所示,智能机姿态矩阵Rg的三个行矢量rgx,rgy,rgz是其自身三轴在局部坐标系下的三个单位矢量。(1)智能机显示屏的姿态测定方法中,
显示屏观察方向和智能机自身Z轴方向刚好相反时显示屏观察方向和智能机自身Z轴方向完全一致时否则可在智能机上选择一个与显示屏观察方向一致的摄像头,该摄像头的拍摄方向一定与观察显示屏的方向一致,通过摄影测量后方交汇法测定该摄像头的局部坐标系姿态RA以及对应的智能机姿态矩阵Rg,采用ΔR=RARg -1精确标定摄像头。
因ΔR描述了显示屏观察姿态和智能机自身姿态之间的固定转换关系,一旦精确测定以后,就是一个恒定值。任意给定Rg就可得到对应的显示屏姿态R=ΔRRg。
基于智能机姿态的虚拟现实漫游描述的方法可用于与地理位置无关的虚拟现实漫游领域,如非实景地形游戏,体感游戏、三维虚拟数据仿真,虚拟全景等领域;
用户可采用实际旋转智能机的方式操控智能机姿态,所对准的方向和姿态在虚拟现实场景中观察的内容与其显示屏上显示的是对应的,采用手指滑动方式操纵控制在虚拟现实中平移。
基于智能机姿态的虚拟现实漫游步骤3的具体实施方式如下,
将显示屏设定为3维绘图模式可采用android系统中以下OpenES语句编程实现:
gl.glMatrixMode(GL10.GL_PROJECTION);//开始设置投影矩阵
gl.glLoadIdentity();//下面转换成二维平面信息绘制模式
GLU.gluPerspective(gl,θ,屏宽/屏高,0.01,(float)1000000);可选取θ=45度
在Android OpenES中采用
GLU.gluLookAt(gl,Xd,Yd,Zd,
Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23);
在OpenGL里可采用以下语句实现
gluLookAt(Xd,Yd,Zd,Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23)
其中rij是R矩阵第i行j列的元素值
编程实现设置漫游观察者位置和姿态
广告牌渲染效果通过如下方法实现:
ΔXi=Xi-XdΔYi=Yi-Yd
以上方法可采用OpenGL中的
m[16]={-ΔYi,ΔXi,0,0,ΔXi,ΔYi,0,0,0,0,L,0,Xi,Yi,Zi,1}
glMultMatrixf(m,0);语句编程实现
或
OpenES中的
m[16]={-ΔYi,ΔXi,0,0,ΔXi,ΔYi,0,0,0,0,L,0,Xi,Yi,Zi,1}
gl.glMultMatrixf(m,0);语句编程实现
根据智能机的真实地理坐标进行虚拟现实漫游中描述的方法可用于与地理位置有关的应用,如地图漫游,数字城市、飞行模拟三维漫游。在没有高程数据的情况下可以直接将图片绑定成纹理绘制在X,Y平面上,有高程信息条件下,可结合高程信息在虚拟现实XYZ空间中绘制出三维网格地形,实现智能机姿态结合手指滑动控制地图漫游。
漫游加速度模拟中可在软件中将Vx,Vy,Vz的衰减计算过程放在渲染线程中计算,也可以单独用一个线程处理。
智能机显示屏恒水平显示是指不论怎样绕X,Y,Z三轴任意转动智能机,智能机显示屏上2维标签自身的水平轴始终平行于地平面。
可将要显示的2维标签中的文字、标签,对话框等作为纹理绑定到内存。渲染的时候将此纹理渲染在经过
变换的多边形上。
因用户的双眼是平行于地平面的,所以不论智能显示器怎么旋转,其上显示的2维标签总能给观众一个正确的姿态显示效果。
可通过glMultMatrix(m);实现
其中
实现;
也可先Translatef(u,v,0),然后glMultMatrix(m);实现
其中
接着智能机姿态的虚拟现实漫游方法步骤4)之后,
将显示屏设定为2维绘图模式可采用android系统中的以下OpenES语句编程实现:
gl.glLoadIdentity();//下面转换成二维平面信息绘制模式
gl.glViewport(0,0,A_Main.screenWidth,A_Main.screenHeight);
gl.glMatrixMode(GL10.GL_PROJECTION);//开始设置投影矩阵
gl.glLoadIdentity();//下面转换成二维平面信息绘制模式
gl.glOrthof(0,A_Main.screenWidth,A_Main.screenHeight,0,-100,100);
gl.glMatrixMode(GL10.GL_MODELVIEW);//开始设置模型绘制矩阵
全景浏览方法中的三维形体一般采用球,立方体,正多面体这样的对称形状,漫游观察者一般位于对称体内部中心点。可采用ALPHA检测技术对球面纹理进行渲染。
控制局部坐标系中三维物体姿态的方法中可以用智能机姿态或者智能机显示屏姿态操纵物体,如果是智能机姿态操纵,采用矩阵Rg计算;如果是智能机显示屏姿态操纵,采用矩阵R计算。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。