本發(fā)明涉及信息技術(shù)領(lǐng)域,具體涉及智能機姿態(tài)測定及虛擬現(xiàn)實漫游方法。
背景技術(shù):
虛擬現(xiàn)實技術(shù)是讓用戶沉浸在智能機顯示屏展現(xiàn)的虛擬或真實三維場景中,將虛擬目標標簽疊加到其中,提示交互信息給用戶。傳統(tǒng)的三維虛擬場景,如數(shù)字三維城市、游戲等應(yīng)用已經(jīng)非常成熟,但是在三維場景里漫游卻主要通過鼠標、鍵盤、滾動球等傳統(tǒng)控制設(shè)備,控制設(shè)備的方向和觀察到的實際場景無法直觀的對應(yīng),渲染設(shè)備龐大而笨拙,這都會給操作者帶來極大不便,影響了這些三維數(shù)字技術(shù)的廣泛應(yīng)用。因此迫切需要一種將控制設(shè)備與顯示設(shè)備合二為一的非常直觀輕便的智能機定姿態(tài)與渲染技術(shù)。本發(fā)明正解決了這個問題。由于智能機姿態(tài)不一樣,同樣位置看到的現(xiàn)實場景不一樣,智能機姿態(tài)精度影響導(dǎo)航精度和虛擬現(xiàn)實漫游仿真精度,因此智能機姿態(tài)的精確測定具有重要意義。虛擬現(xiàn)實應(yīng)用中對智能機姿態(tài)精度提出了更高要求。傳統(tǒng)的智能機姿態(tài)測定,主要利用方向傳感器單軸航向角數(shù)據(jù)信息,系統(tǒng)對智能機姿態(tài)擺放有特定要求,如要求智能機平行于地面,或垂直于地面擺放,而虛擬現(xiàn)實應(yīng)用中用戶手持智能機的姿態(tài)千變?nèi)f化,并不一定嚴格平行或者垂直于地面,這將導(dǎo)致導(dǎo)航方位不準。此外智能機姿態(tài)測定的誤差將帶來虛擬現(xiàn)實漫游誤差,影響用戶體驗,因此迫切需要一種考慮智能機X-Y-Z三軸旋轉(zhuǎn)的姿態(tài)測定算法。基于位置的服務(wù)LBS日益受關(guān)注,但用戶更關(guān)心的不僅是位置,而是自己與目標間的方向和距離。很多老年人和方向感不強的人很難將實際看到的生活場景與地圖中的東南西北聯(lián)系在一起,因此智能機任意角度擺放情況下,疊加在實景視頻上的目標信息及其相關(guān)服務(wù)將給用戶帶來所見即所指的極大便利,將成為未來信息服務(wù)的發(fā)展新趨勢,我們將這種服務(wù)稱為“智能機全方位虛擬現(xiàn)實或增強現(xiàn)實信息服務(wù)”。應(yīng)用包括:1.為商鋪以及供需雙方發(fā)布相對于其他海量用戶的方位和距離提供信息;2.為用戶相對于指定地名,指定單位的方位與距離提供可視化信息服務(wù);3.為用戶之間相互聯(lián)絡(luò)提供方位和距離可視化信息;4.為車、船、人、物流提供相對于目的地的方位和距離可視化信息。5.快遞、送貨,用于電子商務(wù)的最終遞送環(huán)節(jié)。郵遞員通過智能機即可知道收貨人,收件人位置,收件人通過智能機知道郵遞員位置和方向。6.提供一種全新三維場景、數(shù)字城市、數(shù)字地球、游戲漫游模式,不需手指觸碰控制方向,而采用直觀的智能機姿態(tài)控制保證渲染的地圖與三維場景對應(yīng)。7.提供了一種全新的地圖瀏覽查詢模式,不需要用手指觸碰方式,而是采用直觀的智能機姿態(tài)控制保證渲染出的地圖與實景對應(yīng)。傳統(tǒng)的導(dǎo)航服務(wù)是地圖導(dǎo)航服務(wù),用戶看到的是智能機姿態(tài)與周邊實景不對應(yīng)的地圖,用戶需要費力的去把實景與地圖聯(lián)想起來才能得到正確的方向。傳統(tǒng)導(dǎo)航服務(wù)依據(jù)經(jīng)緯度網(wǎng)格組成的2維坐標系進行導(dǎo)航,地球當做經(jīng)緯度組成的一個平面處理,因為相同維度差對應(yīng)的距離偏移≥經(jīng)度差對應(yīng)的距離偏移,所以不同地區(qū)導(dǎo)航算法需進行經(jīng)緯比例調(diào)整,只適合于中低緯度地區(qū)的小區(qū)域,不適合全球,極地附近這種方法已經(jīng)無法再適用,非常不便于全球化普及。而本發(fā)明采用局部坐標系轉(zhuǎn)換后能把全球任何位置的三維場景很好地展現(xiàn)出來。傳統(tǒng)的姿態(tài)檢測技術(shù)主要用于飛機,汽車等大型設(shè)備,追求很高精度,用于軍事、工業(yè)等領(lǐng)域,而且非常貴重和笨重,而本發(fā)明主要考慮用廉價輕便的智能機終端實現(xiàn)普通個人周邊地區(qū)的視頻信息疊加服務(wù)。本發(fā)明不僅考慮方向傳感器的value[0]得到的航向角,在有其他傳感器,如重力加速度磁力計和陀螺儀情況下,還考慮了其他幾種姿態(tài)傳感器捕獲到的數(shù)據(jù),使得檢測到的姿態(tài)更加精確,在沒有這些傳感器條件下也能得到粗略姿態(tài)。本發(fā)明可以在智能機,諸如Andriod,蘋果系統(tǒng)上方便地實現(xiàn)虛擬現(xiàn)實漫游、地圖瀏覽功能??紤]到當前智能機傳統(tǒng)應(yīng)用的各種缺陷和不足,本發(fā)明提供一種考慮智能機3軸旋轉(zhuǎn)任意姿態(tài)測定的虛擬現(xiàn)實或增強現(xiàn)實三維渲染及漫游方法,用戶在三維空間中以任意姿態(tài)擺放智能機都能在視窗內(nèi)觀察到與該位姿對應(yīng)的周邊真實或虛擬三維渲染場景。由于用戶手持智能機的姿態(tài)與三維場景中渲染的三維效果完全一致,用戶會體驗到一種極其逼真的身臨其境三維效果。因此基于本發(fā)明可以實現(xiàn)虛擬現(xiàn)實電子商務(wù)、虛擬現(xiàn)實商鋪廣告信息實景三維渲染發(fā)布、三維數(shù)字城市漫游,實景三維地圖標注,實景三維游戲、攝影測量測繪等。同時商鋪也能借助服務(wù)平臺廣泛發(fā)布其廣告信息?;诒景l(fā)明可實現(xiàn)電子商務(wù)服務(wù),用戶客戶端之間,用戶客戶端與商鋪之間可以用視頻實景預(yù)覽觀察相互之間的位置、方位關(guān)系,同時商鋪也能借助服務(wù)平臺廣泛發(fā)布其廣告信息。本發(fā)明中智能機包括一切含顯示顯示屏和姿態(tài)傳感的智能設(shè)備,如手機,平板電腦,筆記本電腦,帶姿態(tài)傳感和顯示屏的攝像頭,相機,智能顯示器,智能電視機顯示屏、以及各種可穿戴設(shè)備。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的問題是提供智能機姿態(tài)測定及虛擬現(xiàn)實漫游方法,該方法使用戶在智能機上獲得便捷、直觀的可視化信息。本發(fā)明提供的技術(shù)方案是,智能機姿態(tài)測定及虛擬現(xiàn)實漫游方法,包括以下內(nèi)容:智能機姿態(tài)測量方法的輸入輸出定義輸入:方法(1)重力加速度計傳感器的三個值ax、ay、az,要求配置最低,適用性最廣磁力計傳感器的三個值{mx,my,mz}或方向傳感器的航向角value[0]方法(2)旋轉(zhuǎn)矢量傳感器的三個或四個輸出。需旋轉(zhuǎn)矢量傳感器方法(3)重力加速度計,磁力計和陀螺儀。另需陀螺儀輸出:完整描述智能機局部坐標系姿態(tài)的矩陣Rg矩陣是一個3x3單位正交矩陣,由三行組成,每行一個三維矢量,三個矢量分別為rgx,rgy,rgz。第一行rgx是智能機自身x軸在局部坐標系下的單位矢量;第二行rgy是智能機自身y軸在局部坐標系下的單位矢量;第三行rgz是智能機自身z軸在局部坐標系下的單位矢量。如圖1所示,智能機姿態(tài)矩陣Rg的三個行矢量rgx,rgy,rgz是其自身三軸在局部坐標系下的三個單位矢量。本發(fā)明智能機姿態(tài)測定方法,包括以下步驟:測定智能機姿態(tài)矩陣Rg。Rg是一個3x3單位正交矩陣,是相對于局部坐標系的,局部坐標系Z軸與重力方向一致,若智能機磁力計指示方向是北,則北代表局部坐標系X軸,西代表局部坐標系Y軸;若智能機磁力計指示方向是東,則東代表局部坐標系X軸,北代表局部坐標系Y軸;若智能機磁力計指示方向是南,則南代表局部坐標系X軸,東代表局部坐標系Y軸;若智能機磁力計指示方向是西,則西代表局部坐標系X軸,南代表局部坐標系Y軸;局部坐標系的原點可以定義為位于地球上任意一點。Rg由下法之一獲得:方法(1)采用重力加速度計與磁力計如果智能機有重力加速度計,且有磁力計或方向傳感器,用以下公式(1)計算Rg其中vax,vay,vaz是智能機測出來的智能機重力加速度傳感器的x,y,z三個方向的值,或這三個檢測值經(jīng)過濾波的結(jié)果,如過程中檢測到新值vax’,vay’,vaz’可采用:αvax’+(1-α)vax替換原來的vaxαvay’+(1-α)vay替換原來的vayαvaz’+(1-α)vaz替換原來的vazα是介于[0,1]之間的一個值。Ra是重力傳感器芯片相對于智能機的姿態(tài)轉(zhuǎn)換矩陣。對于大部分智能手機而言,當az<0時,s=-1,az≥0時,s=1;若采用方向傳感器:帶入公式(1)計算Rg;若采用磁力計傳感器:{vmx,vmy,vmz是是智能機上磁力傳感器檢測到的三個值或這三個值經(jīng)濾波的結(jié)果,如過程中檢測到新值vmx’,vmy’,vmz’可采用:αmvmx’+(1-αm)vmx替換原來的vmxαmvmy’+(1-αm)vmy替換原來的vmyαmvmz’+(1-αm)vmz替換原來的vmzαm是介于[0,1]之間的一個值。計算其中Rm是磁力計傳感器芯片相對于智能機的姿態(tài)轉(zhuǎn)換矩陣。對于大部分智能手機而言,再計算利用磁力計計算方位角的三角函數(shù)為:帶入公式(1)計算Rg反復(fù)利用上述公式(1)計算Rg.若既無磁力計,也無方向傳感器,將方位角角初值定為0,并當智能機需要模擬逆時針繞重力方向旋轉(zhuǎn)時增加角,需要模擬順時針繞重力方向旋轉(zhuǎn)則減小角。方法(2)用旋轉(zhuǎn)矢量傳感器如果智能機配置有旋轉(zhuǎn)矢量傳感器首先采用下述(a)(b)(c)中的一種方式得到Rg0矩陣(a)如果檢測到智能機上的旋轉(zhuǎn)矢量傳感器只有3個數(shù)據(jù)values[0],values[1],values[2]采用以下公式得到q1=values[0],q2=values[1],q3=values[2],則Rg0矩陣為:(b)如果檢測智能機上的旋轉(zhuǎn)矢量傳感器有4個數(shù)據(jù),q0=values[3],q1=values[0],q2=values[1],q3=values[2]則Rg0矩陣為:有的版本的android系統(tǒng)需要先將{values[3],values[0],values[1],values[2]}單位化以后才能作為{q0,q1,q2,q3}使用。(c)智能機上指定傳感器類型為旋轉(zhuǎn)矢量類型,實時得到旋轉(zhuǎn)矢量傳感器的觀測值利用智能機上的旋轉(zhuǎn)矢量轉(zhuǎn)矩陣函數(shù)將傳感器的觀測值轉(zhuǎn)換成模型轉(zhuǎn)換矩陣R44,R44矩陣的左上角3x3子陣是Rg0然后根據(jù)智能機旋轉(zhuǎn)矢量傳感器坐標系定義的不同,采取以下幾種情況之一得到Rg:若旋轉(zhuǎn)矢量傳感器的X軸指向東,Y軸指向北,則若旋轉(zhuǎn)矢量傳感器的X軸指向北,Y軸指向西,則Rg=Rg0;(3)若旋轉(zhuǎn)矢量傳感器的X軸指向南,Y軸指向東,則方法(3)采用陀螺儀迭代方法計算智能機姿態(tài)矩陣Rg若智能機有陀螺儀,可采用以下方法迭代得到Rg矩陣:第1步計算q0,q1,q2,q3的初值選用上述公式(1)或(2)(3)(4)計算Rg的初值,然后利用姿態(tài)矩陣轉(zhuǎn)4元素成熟技術(shù)將Rg矩陣轉(zhuǎn)換成4元素q0,q1,q2,q3將4元數(shù)q0,q1,q2,q3作為以下迭代計算的初值第2步設(shè)定exInt,eyInt,ezInt值為0exInt=0,eyInt=0,ezInt=0第3步根據(jù)接收到的磁力計矢量{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再轉(zhuǎn)換到正確磁場矢量{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步根據(jù)接收到的重力加速度計數(shù)據(jù)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為一可調(diào)節(jié)的正系數(shù),Ki在0.00001至0.5中任意選取;第5步根據(jù)誤差矢量{ex,ey,ez}及其累計值將陀螺儀數(shù)據(jù){gx0,gy0,gz0}糾正成{gx,gy,gz}假設(shè)智能機讀出當前的一組陀螺儀數(shù)據(jù)為{gx0,gy0,gz0}gx=gx0+Kp×ex+exInt;gy=gy0+Kp×ey+eyInt;gz=gz0+Kp×ez+ezInt;其中Kp為一可調(diào)節(jié)的正系數(shù)Kp在0.000001至20.0中任意選??;第6步根據(jù)陀螺儀數(shù)據(jù)gx,gy,gz修正四元數(shù)隨著不斷接收到陀螺儀數(shù)據(jù)gx,gy,gz,對4元數(shù)按如下方式修正,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元數(shù)和Rg矩陣將四元數(shù){q0,q1,q2,q3}單位化成4元數(shù)轉(zhuǎn)Rg矩陣公式如下第8步回到第3步繼續(xù)接收陀螺儀運動數(shù)據(jù)更新姿態(tài)4元數(shù)q0~q3,在循環(huán)的過程中每次到第7步都能輸出當前的Rg矩陣;本發(fā)明測定智能機上顯示屏姿態(tài)的方法:定義智能機上顯示屏的姿態(tài)矩陣為rx是顯示屏水平方向在局部坐標系中的分量;ry是顯示屏上下方向在局部坐標系中的分量;rz是垂直于顯示屏表面方向向顯示屏內(nèi)部看的視線方向在局部坐標系中的分量。包括以下步驟:1)按本發(fā)明測定智能機姿態(tài)的方法,得到智能機的姿態(tài)矩陣Rg;2)計算R=ΔR×Rg;得到顯示屏的姿態(tài)R矩陣ΔR為智能機顯示屏姿態(tài)矩陣R相對于智能機姿態(tài)矩陣Rg的一個固定的方向的轉(zhuǎn)換,當顯示屏觀察方向和智能機自身Z軸方向剛好相反時當顯示屏觀察方向和智能機自身Z軸方向完全一致時否則可在智能機上選擇一個與顯示屏xyz三軸姿態(tài)一致的攝像頭,采用成熟攝影測量后方交匯法通過攝像頭精確標定ΔR。方法如下:1.建立控制場坐標系,即原點位于智能機的GPS接收點或北斗定位點的局部坐標系;2.用智能機攝像頭拍攝控制場坐標系中的點集;按權(quán)利要求1方法測定智能機拍攝點集時的Rg,Rg也是相對于控制場坐標系定義的;3.根據(jù)控制場點集中各已知點轉(zhuǎn)換到控制場坐標系的3維坐標與拍攝圖像中點集像坐標的對應(yīng)關(guān)系,采用攝影測量后方交會方法測量出智能機攝像頭相對于控制場坐標系的姿態(tài)矩陣RA和攝像頭光心相對于控制場坐標系的坐標ΔT;4.按下式得到ΔR=RARg-1。ΔT同時也是攝像頭光心,近似為顯示屏中心,相對于智能機GPS或北斗定位點的局部坐標系偏移;通過測定該攝像頭的姿態(tài)R得到虛擬現(xiàn)實中智能機顯示屏觀察姿態(tài)矩陣R。本發(fā)明還提供了基于智能機姿態(tài)的虛擬現(xiàn)實漫游方法:基于前述方法得到智能機顯示屏姿態(tài)矩陣R矩陣,采用以下步驟:1)采用本發(fā)明方法得到與智能機顯示屏姿態(tài)一致的攝像頭姿態(tài)R即為智能機顯示屏姿態(tài)矩陣R若無此攝像頭,則當智能機自身姿態(tài)Z軸方向和智能機顯示屏觀察姿態(tài)方向相反時當智能機自身姿態(tài)Z軸方向和智能機顯示屏觀察姿態(tài)方向一致時R=Rg.2)移動控制漫游觀察者在局部坐標系中的位置定義漫游觀察者是在局部坐標系中的一個具備自身位置、姿態(tài)、用于觀察周邊場景的對象。智能機顯示屏所渲染的場景就是漫游觀察者在局部坐標系中所應(yīng)看到的場景圖像;定義漫游觀察者在局部坐標系中的坐標為Xd,Yd,Zd用以下三種方法之一控制漫游觀察者在虛擬場景中的移動:(1)模式1:普通2維移動當用戶手指按{ΔX,ΔY}方向滑過智能機顯示屏平面的時候,相當于局部坐標系下,Xd增加Vx=ΔXr11+ΔYr21;Yd增加Vy=ΔXr12+ΔYr22;Zd不變此方法主要適合于智能機顯示屏接近水平時的情況。(2)模式2:智能2維移動當手指按{ΔX,ΔY}方向滑過智能機顯示屏平面的時候,采用如下方法:首先選擇R矩陣右側(cè)一列中的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í)rΔX,ΔY與滑動位移成正比,那么可采用用戶雙指滑動觸碰智能機操作實現(xiàn)3維操作,采用雙指合攏相當于ΔZ<0,雙指拉開相當于ΔZ>0(或者雙指合攏相當于ΔZ>0,雙指拉開相當于ΔZ<0)。當智能機接收到手指控制信息{ΔX,ΔY,ΔZ}的時候,Xd增加Vx=ΔXr11+ΔYr21+ΔZr31Yd增加Vy=ΔXr12+ΔYr22+ΔZr32Zd增加Vz=ΔXr13+ΔYr23+ΔZr333)設(shè)置漫游觀察者在局部坐標系里的位置和方向:根據(jù)漫游觀察者的局部坐標系坐標Xd,Yd,Zd,以及步驟1測定得到的姿態(tài)矩陣R,利用OpenGL,OpenES,OSXOpenGL,Direct3D或osg繪圖軟件庫中用于設(shè)定虛擬觀察相機位姿的圖形庫函數(shù),設(shè)置漫游觀察者在局部坐標系里的位置和方向:需要設(shè)定以下幾個量:1.漫游觀察者自身觀察的垂直視場角θ,就是智能機顯示屏上邊緣中點的視線方向與下邊緣中點的視線方向的夾角。通常可選取θ=45度.2漫游觀察者所在的位置Xd,Yd,Zd,由步驟2漫游算法修改;3.漫游者觀察方向{r31,r32r33}或者用戶注視點坐標(Xd+r31,Yd+r32,Zd+r33)4.漫游者自身向上方向的矢量{-r21,-r22,-r23}其中rij是智能機顯示屏姿態(tài)R矩陣中的第i行j列比如在AndroidOpenES中采用GLU.gluLookAt(gl,(float)Xd,Yd,Zd,Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23);其中rij是R矩陣第i行j列的元素值編程實現(xiàn)設(shè)置漫游觀察者位置和姿態(tài)4)在局部坐標系下渲染繪制三維場景預(yù)先在智能機的可視顯示屏內(nèi)設(shè)置一個3維渲染圖層進行三維場景渲染,可視窗口內(nèi)預(yù)先疊加視頻或地圖圖層;這里被繪制的三維場景中的點、線、面和物體模型的幾何坐標都要轉(zhuǎn)換成局部坐標系下的坐標[XiYiZi]T,即與漫游者的坐標Xd,Yd,Zd在同一個局部坐標系下;用OpenGL,OpenES,OSXOpenGL,Direct3D或osg繪圖軟件庫實現(xiàn)局部坐標系下的三維繪圖。在上述步驟4)中,在局部坐標系中繪制一個標有廣告符號、文字的紋理多邊形面或模型定義為廣告牌。將廣告牌的實際地理坐標轉(zhuǎn)換到局部坐標系,再按如下三種方法渲染繪制都可使得廣告牌的正面始終正對著漫游觀察者。方法1(a)假設(shè)商鋪廣告牌的局部坐標系坐標在XiYiZi,按如下方法設(shè)置模型繪制轉(zhuǎn)換矩陣:將m設(shè)定為模型轉(zhuǎn)換矩陣。(b)在y-z平面上繪圖即可讓廣告牌永遠正對智能機方向方法2(a)假設(shè)商鋪廣告牌的局部坐標系坐標在XiYiZi,按如下方法設(shè)置模型繪制轉(zhuǎn)換矩陣:將m設(shè)定為模型轉(zhuǎn)換矩陣。(b)在x-z平面上繪圖即可讓廣告牌永遠正對智能機方向方法(1)(2)繪制出來的廣告牌都具有近大遠小的立體效果。方法3(a)假設(shè)商鋪廣告牌的局部坐標系坐標在XiYiZi,按如下方法設(shè)置模型繪制轉(zhuǎn)換矩陣:將m設(shè)定為模型轉(zhuǎn)換矩陣。(b)在x-z平面上繪圖即可讓廣告牌永遠正對智能機方向這樣繪制出來的廣告牌將不具有近大遠小的效果,遠近一樣大,方便用戶觀察。上述渲染的商鋪信息內(nèi)容包括名稱、符號屬性、類別、與智能機的距離、角度和/或高度。根據(jù)智能機的真實地理坐標進行虛擬現(xiàn)實漫游:本發(fā)明設(shè)定局部坐標系原點是智能機顯示屏中心,即Xd,Yd,Zd是相對于智能機顯示屏中心的局部偏移坐標,步驟4)之前增加如下操作:(a)獲取智能機的高度hs,緯度θs和經(jīng)度θs是智能機的緯度,是智能機的經(jīng)度,由智能機上自帶的GPS接受模塊獲取;(b)計算智能機所在經(jīng)緯度的Rv(c)計算智能機所在緯度θs經(jīng)度高度hs的地心坐標系坐標Ts利用大地測量學(xué)中經(jīng)典的轉(zhuǎn)換公式。其中hs是智能機離地面高度Ns是隨緯度變化的卯酉圈曲率半徑。a,b是地球橢球的長短軸,是大地測量學(xué)中的已知常量;e是偏心率,是定值。(d)根據(jù)地球上任何一個點的經(jīng)度緯度θi和高程hi得到該點地心坐標系坐標T0i=[X0iY0iZ0i]T利用大地測量學(xué)中經(jīng)典的轉(zhuǎn)換公式其中hi是點離地面高度Ni是隨緯度變化的卯酉圈曲率半徑。a,b是地球橢球的長短軸,是大地測量學(xué)中的已知常量;e是偏心率,是定值。如果已知一個物體所在經(jīng)緯度和θi,通過本步驟計算出它的地心坐標系坐標T0i(e)地心坐標系坐標T0i轉(zhuǎn)換為局部坐標系中的坐標(XiYiZi)TΔT是智能機顯示屏中心相對于智能機GPS接收天線的局部坐標系偏移。這樣保證了權(quán)利要求3中的(XiYiZi)T和(XdYdZd)T都是相對于智能機顯示屏中心的偏移坐標??山迫ˇ=[000]T權(quán)利要求3中步驟4)中繪制三維場景須用這種轉(zhuǎn)換為局部坐標系中的坐標(XiYiZi)T。在基于智能機姿態(tài)的虛擬現(xiàn)實漫游方法步驟2)中設(shè)置加速度模擬漫游效果:步驟2)中如果需要模擬加速度漫游移動特效,當手指滑動的時候,根據(jù)手指滑動速度大小給予一個初速度{Vx,Vy,Vz},Xd,Yd,Zd將不停地增加速度分量Vx,Vy,Vz,然后讓速度分量Vx,Vy,Vz隨時間推移不斷衰減,其中VZ在權(quán)利要求3步驟2)模式1,2情況下恒等于零。讓速度體現(xiàn)到局部坐標系下的漫游位移Xd增加VxYd增加VyZd增加Vz僅用于權(quán)利要求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以上過程不斷循環(huán)即可實現(xiàn)局部加速度漫游效果。本發(fā)明還涉及虛擬現(xiàn)實場景中的2維標簽的恒水平于地面的顯示方法:2維標簽是指2維文字、圖符、圖片、標記、編碼、對話框、編輯框、列表框等一切在智能機顯示屏中以2維形式顯示的對象。因用戶雙眼是水平于地面的,前述基于智能機姿態(tài)的虛擬現(xiàn)實漫游方法只能保證3維物體能正確顯示,2維標簽的顯示姿態(tài)會隨智能機旋轉(zhuǎn)而旋轉(zhuǎn),用戶看到的標簽就不是正放的。故設(shè)計本方法使得標簽始終正放顯示。方法不局限于矩形顯示屏,對常用矩形顯示屏而言,采用以下方法。在前述基于智能機姿態(tài)的虛擬現(xiàn)實漫游方法步驟3和步驟4)之間或步驟4)結(jié)束之后,將顯示屏設(shè)定為2維繪圖模式并設(shè)置若干個2維標簽,針對每一個2維標簽,按如下步驟顯示:步驟1)首先確定虛擬現(xiàn)實場景中2維標簽的中心位置u,v;如果標簽用于標注三維場景中局部坐標系坐標為(X,Y,Z)的目標,則根據(jù)以下公式確定目標顯示的中心位置u,vZO=r31(X-Xd)+r32(Y-Yd)+r33(Z-Zd)式中:w是智能機顯示屏寬度,h是智能機顯示屏高度。r11~r33是權(quán)利要求2所述的方法中的R矩陣對應(yīng)行列的元素。θ是垂直視場角θXd,Yd,Zd是漫游觀察者在局部坐標系中的坐標。如果滿足ZO>0且0<u<w且0<v<h則u,v保持不變,否則需要按下法修正u,v若ZO=0則將[uv]替換為從點(w/2,h/2)出發(fā)按矢量{r11(X-Xd)+r12(Y-Yd)+r13(Z-Zd),r21(X-Xd)+r22(Y-Yd)+r23(Z-Zd)}方向的射線與顯示屏邊緣相交的2維點。若ZO>0則將[uv]替換為點(w/2,h/2)到(u,v)的連線與顯示屏邊緣相交的2維點。若ZO<0則將[uv]替換為點(u,v)到(w/2,h/2)的延長線與顯示屏邊緣相交的2維點。如果標簽不是用于標注目標,u,v為界面設(shè)計者設(shè)定的顯示屏坐標,或是用戶手指或鼠標點擊的顯示屏坐標。步驟2)計算矢量{Qx,Qy}方法(1)Qx=-r23/LaQy=r13/La其中r23,r13是權(quán)利要求2所述的方法中的R矩陣對應(yīng)行列的元素,方法(2)利用權(quán)利要求1方法(1)所述加速度計的前兩個輸出值ax,ay得到步驟3)在2維平面上經(jīng)過以下矩陣旋轉(zhuǎn)變換以后再繪制2維標簽:2維標簽上每一點X,經(jīng)過上式變換到坐標X’顯示出來。±取+是正放顯示,取-是倒放顯示,標簽的水平軸始終平行于地面。就會看到顯示屏上該顯示對象自身的水平軸始終平行于地平面,標簽始終處于正放狀態(tài)。在基于智能機姿態(tài)的虛擬現(xiàn)實漫游方法的步驟4)中所述三維場景為一個空心的三維形體,三維形體可以是球,立方體、柱體、正多面體、錐體,三維形體的內(nèi)壁以全景圖作為紋理進行渲染。所述漫游觀察者在虛擬場景中位于三維形體內(nèi)部的某一固定點[Xd,Yd,Zd]=[0,0,0],一般位于三維形體中心,從三維形體內(nèi)部觀察三維形體的內(nèi)壁紋理,實現(xiàn)利用智能機顯示屏姿態(tài)R矩陣控制全景瀏覽。本發(fā)明進一步提供了控制局部坐標系中三維物體姿態(tài)的方法:將Rg矩陣設(shè)定為仿真軟件系統(tǒng)中的模型轉(zhuǎn)換矩陣M的左上角3x3矩陣這實現(xiàn)了利用智能機姿態(tài)控制三維場景中某一物體的姿態(tài)。附圖說明圖1為智能機姿態(tài)矩陣R的三個行矢量rgx,rgy,rgz在局部坐標系中的所指的矢量方向。具體實施方式本發(fā)明針對3種方法需要智能機的3種配置類型的傳感器輸入方法(1)用以下公式計算Rg其中利用磁力計計算方位角的三角函數(shù)為:在實際操作中,若出現(xiàn)地磁偏角導(dǎo)致磁力方向不是指著正北,可通過下式計算Rg重力加速度計傳感器的三個值{vax,vay,vaz}要求配置最低,適用性最廣;磁力計傳感器的三個值{vmx,vmy,vmz}或方向傳感器的航向角value[0]若既無磁力計,也無方向傳感器,方位角角可通過用戶界面滑塊控制增減角。往地心看繞重力方向,模擬逆時針旋轉(zhuǎn)時角增加,模擬順時針旋轉(zhuǎn)時角減小。方法(2)旋轉(zhuǎn)矢量傳感器的三個或四個輸出,需旋轉(zhuǎn)矢量傳感器。方法(3)重力加速度計,磁力計和陀螺儀,另需陀螺儀。計算過程中,很多變量如L和可以預(yù)存下來,避免重復(fù)計算,以提高速度。本發(fā)明輸出矩陣Rg的幾何意義如下完整描述智能機局部坐標系姿態(tài)的矩陣Rg矩陣是一個3x3單位正交矩陣,由三行組成,每行一個三維矢量,三個矢量分別為rgx,rgy,rgz。第一行rgx是智能機自身x軸在局部坐標系下的單位矢量;第二行rgy是智能機自身y軸在局部坐標系下的單位矢量;第三行rgz是智能機自身z軸在局部坐標系下的單位矢量。如圖1所示,智能機姿態(tài)矩陣Rg的三個行矢量rgx,rgy,rgz是其自身三軸在局部坐標系下的三個單位矢量。(1)智能機顯示屏的姿態(tài)測定方法中,顯示屏觀察方向和智能機自身Z軸方向剛好相反時顯示屏觀察方向和智能機自身Z軸方向完全一致時否則可在智能機上選擇一個與顯示屏觀察方向一致的攝像頭,該攝像頭的拍攝方向一定與觀察顯示屏的方向一致,通過攝影測量后方交匯法測定該攝像頭的局部坐標系姿態(tài)RA以及對應(yīng)的智能機姿態(tài)矩陣Rg,采用ΔR=RARg-1精確標定攝像頭。因ΔR描述了顯示屏觀察姿態(tài)和智能機自身姿態(tài)之間的固定轉(zhuǎn)換關(guān)系,一旦精確測定以后,就是一個恒定值。任意給定Rg就可得到對應(yīng)的顯示屏姿態(tài)R=ΔRRg?;谥悄軝C姿態(tài)的虛擬現(xiàn)實漫游描述的方法可用于與地理位置無關(guān)的虛擬現(xiàn)實漫游領(lǐng)域,如非實景地形游戲,體感游戲、三維虛擬數(shù)據(jù)仿真,虛擬全景等領(lǐng)域;用戶可采用實際旋轉(zhuǎn)智能機的方式操控智能機姿態(tài),所對準的方向和姿態(tài)在虛擬現(xiàn)實場景中觀察的內(nèi)容與其顯示屏上顯示的是對應(yīng)的,采用手指滑動方式操縱控制在虛擬現(xiàn)實中平移?;谥悄軝C姿態(tài)的虛擬現(xiàn)實漫游步驟3的具體實施方式如下,將顯示屏設(shè)定為3維繪圖模式可采用android系統(tǒng)中以下OpenES語句編程實現(xiàn):gl.glMatrixMode(GL10.GL_PROJECTION);//開始設(shè)置投影矩陣gl.glLoadIdentity();//下面轉(zhuǎn)換成二維平面信息繪制模式GLU.gluPerspective(gl,θ,屏寬/屏高,0.01,(float)1000000);可選取θ=45度在AndroidOpenES中采用GLU.gluLookAt(gl,Xd,Yd,Zd,Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23);在OpenGL里可采用以下語句實現(xiàn)gluLookAt(Xd,Yd,Zd,Xd+r31,Yd+r32,Zd+r33,-r21,-r22,-r23)其中rij是R矩陣第i行j列的元素值編程實現(xiàn)設(shè)置漫游觀察者位置和姿態(tài)廣告牌渲染效果通過如下方法實現(xiàn):ΔXi=Xi-XdΔYi=Y(jié)i-Yd以上方法可采用OpenGL中的m[16]={-ΔYi,ΔXi,0,0,ΔXi,ΔYi,0,0,0,0,L,0,Xi,Yi,Zi,1}glMultMatrixf(m,0);語句編程實現(xiàn)或OpenES中的m[16]={-ΔYi,ΔXi,0,0,ΔXi,ΔYi,0,0,0,0,L,0,Xi,Yi,Zi,1}gl.glMultMatrixf(m,0);語句編程實現(xiàn)根據(jù)智能機的真實地理坐標進行虛擬現(xiàn)實漫游中描述的方法可用于與地理位置有關(guān)的應(yīng)用,如地圖漫游,數(shù)字城市、飛行模擬三維漫游。在沒有高程數(shù)據(jù)的情況下可以直接將圖片綁定成紋理繪制在X,Y平面上,有高程信息條件下,可結(jié)合高程信息在虛擬現(xiàn)實XYZ空間中繪制出三維網(wǎng)格地形,實現(xiàn)智能機姿態(tài)結(jié)合手指滑動控制地圖漫游。漫游加速度模擬中可在軟件中將Vx,Vy,Vz的衰減計算過程放在渲染線程中計算,也可以單獨用一個線程處理。智能機顯示屏恒水平顯示是指不論怎樣繞X,Y,Z三軸任意轉(zhuǎn)動智能機,智能機顯示屏上2維標簽自身的水平軸始終平行于地平面。可將要顯示的2維標簽中的文字、標簽,對話框等作為紋理綁定到內(nèi)存。渲染的時候?qū)⒋思y理渲染在經(jīng)過變換的多邊形上。因用戶的雙眼是平行于地平面的,所以不論智能顯示器怎么旋轉(zhuǎn),其上顯示的2維標簽總能給觀眾一個正確的姿態(tài)顯示效果??赏ㄟ^glMultMatrix(m);實現(xiàn)其中實現(xiàn);也可先Translatef(u,v,0),然后glMultMatrix(m);實現(xiàn)其中接著智能機姿態(tài)的虛擬現(xiàn)實漫游方法步驟4)之后,將顯示屏設(shè)定為2維繪圖模式可采用android系統(tǒng)中的以下OpenES語句編程實現(xiàn):gl.glLoadIdentity();//下面轉(zhuǎn)換成二維平面信息繪制模式gl.glViewport(0,0,A_Main.screenWidth,A_Main.screenHeight);gl.glMatrixMode(GL10.GL_PROJECTION);//開始設(shè)置投影矩陣gl.glLoadIdentity();//下面轉(zhuǎn)換成二維平面信息繪制模式gl.glOrthof(0,A_Main.screenWidth,A_Main.screenHeight,0,-100,100);gl.glMatrixMode(GL10.GL_MODELVIEW);//開始設(shè)置模型繪制矩陣全景瀏覽方法中的三維形體一般采用球,立方體,正多面體這樣的對稱形狀,漫游觀察者一般位于對稱體內(nèi)部中心點??刹捎肁LPHA檢測技術(shù)對球面紋理進行渲染。控制局部坐標系中三維物體姿態(tài)的方法中可以用智能機姿態(tài)或者智能機顯示屏姿態(tài)操縱物體,如果是智能機姿態(tài)操縱,采用矩陣Rg計算;如果是智能機顯示屏姿態(tài)操縱,采用矩陣R計算。應(yīng)當理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進或變換,而所有這些改進和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護范圍。