本發明涉及計算機圖形學技術領域,特別是涉及基于vr及手勢交互技術的全球氣候矢量場數據可視化方法。
背景技術:
全球氣候矢量數據可視化方法為傳統氣象矢量數據的顯示提供了另一種直觀清晰的表達方式,為相關人員提供了對氣候數據進行分析的便利工具。
氣候數據一般有風、洋流等矢量場數據,針對三維矢量場數據,一般提供箭矢圖、流圖、線積分卷積等傳統矢量場可視化方法,常用的還有圖標法、幾何法以及紋理法等。對于預報員而言,通過這些復雜的圖文來獲得對整個大氣情況的理解是很難的。三維大氣數據可視化方法,尤其是矢量數據的可視化,有設計粒子對流方法用動畫表達矢量場數據,meihh,chenhd,zhaox,liuhn,zhub,chenw.visualizationsystemof3dglobalscalemeteorologicaldata.ruanjianxuebao/journalofsoftware,2016,27(5):1140-1150(inchinese)。本文在粒子對流方法模擬矢量風數據的同時,并且結合當前火熱的vr,通過使用oculusriftdk2設備在將氣象數據可視化在沉浸式虛擬環境中,并通過預先設定leapmotion中手勢動作的定義,增強了交互性。
leapmotion是面向pc以及mac的體感控制器制造公司leap于2013年2月27日發布的體感控制器。支持windows7、windows8以及macosx10.7及10.8,leapmotion控制器可追蹤全部10只手指,精度高達1/100毫米,以超過每秒200幀的速度追蹤您的手部移動。
近年來,隨著虛擬現實(vr)被廣泛接受,其描述為用戶被三維計算機生成的表示包圍的一種體驗,用戶能夠在其中移動,從不同的角度查看它,并有能力重塑它。除了直觀的交互,虛擬環境也可以允許用戶的更大程度的移動。通過使用vr,數據可以變得更容易理解,記住和參考。用戶操作或觀察,同時沉浸,可以形成用戶的敘事,從而增強召回的能力數據。用戶命令和輸入可以立即修改虛擬世界并描繪每個變化的影響,從而創造一個動態模型。實時交互是一個vr的關鍵特征,例如氣象學家可以使用它來形成對氣象數據的動態分析,比單獨使用圖表更快。vr對于進一步提高可視化數據的可讀性有顯著效果,大量可視化研究中采用vr,irenekatsouri,aimiliatzanavari,kyriakosherakleous,andcharalambospoullis.2015.visualizingandassessinghypothesesformarinearchaeologyinavrcaveenvironment.acmj.comput.cult.herit.8,2,article10(march2015),18pages開發了一個使用vrcave的沉浸式3d可視化應用程序,旨在使研究人員能夠挖掘這個古代沉船所提供的豐富的信息,也有對考古數據在虛擬現實環境中可視化的研究,但在虛擬現實環境中對三維大氣數據可視化的研究鮮有。
技術實現要素:
針對現有技術中存在的上述問題,本發明的目的在于提供基于vr及手勢交互技術的全球氣候矢量場數據可視化方法。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于該方法包括以下步驟:
步驟1)搭建3d環境,設計一個場景并根據球面體繪制方法構造一個球形代理幾何;
步驟2)獲取由naturalearth提供的地圖數據,并對地圖數據進行預處理,再繪制到步驟1)設計場景中的球體上;
步驟3)獲取由美國國家氣象局操作的全球預報系統生成的天氣數據,并對天氣數據進行預處理,預測每天生成四次,可從nomads下載,這些文件是grib2格式,包含超過300條記錄;
步驟4)對步驟3)中的數據進行風向快速參考,用于轉換向量風分量、風速和風向;
步驟5)對經步驟4)處理后獲得轉換后的向量風分量再進行地轉風近似求解;
步驟6)將步驟5)處理后的數據投影到步驟2)的球體上;
步驟7)有限差分近似用于在步驟6)插值過程期間估計該失真,確保風粒子路徑被正確渲染,得到可視化結果;
步驟8)交互設計,根據需求采用手勢交互技術定義各種操作手勢,實現全球氣候矢量場數據可視化,操作手勢包括水平豎直移動、旋轉、放大及縮小。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟1)的球面體繪制方法如下:球面體繪制方法基于傳統的光線投射算法,采用球面坐標表達構造一個球形代理幾何,并以球面坐標系的三個空間維度坐標作為紋理坐標,以歸一化后的三維體數據作為紋理坐標,以所述球形代理幾何作為載體構造三維體數據的三維體紋理,而在繪制過程前,又將球面坐標轉換回直角坐標表達,通過求解二次方程計算投射光線與代理幾何的交點,具體為:
設當前相機視點位置為(x0,y0,z0),光線方位為單位向量(xd,yd,zd),則得到其參數化方程:
x=x0+xd×t
y=y0+yd×t
z=z0+zd×t
由于球形代理幾何中心點為(0,0,0),可以由方程
若二次方程無解,則相機視點在球體外且投射光線與代理幾何不相交;若有解,則根據解得情況計算不同的光線積分的初始點和光線積分的終止點,獲得當前光線位置轉化為球面坐標。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟2)中的地圖數據預處理方法如下:將所獲取的地圖數據為geojson格式轉換為d3.js適用的topojson格式,即首先在processing中安裝gdal和topojson,然后將geojson數據文件中邊界線記錄次數改為一次,且將浮點數據轉換為整數形式。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟4)中的風向快速參考方法如下:由于所得到的氣象風數據以角度表示,為方便計算,將角度轉化成度,通過乘以dperr(180/π=57.29578)將角度轉換為度,并通過乘以rperd(π/180=0.01745329)將角度轉換為弧度:
地理風坐標系:ugeo,vgeo;
+ugeo分量代表風向東,即西風;-ugeo表示風向西,即東風;
+vgeo是風向北,即南風;
地理風向:dirgeo是相對于真正北方的方向,其中0=北,90=東,180=南,270=西,dirgeo=atan2(-ugeo,-vgeo)*dperr=270-(atan2(vgeo,ugeo)*dperr);
水平風速spd:spd=sqrt(ugeo*ugeo+vgeo*ugeo);要從dirgeo和spd轉換為ugeo和vgeo:ugeo=-spd*sin(dirgeo*rperd);vgeo=-spd*cos(dirgeo*rperd)。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟5)中的地轉風近似求解如下:步驟4)的風向快速參考轉換了向量風分量,近似被分解成其兩個水平分量u和v,u分量表示風的東西分量,v分量表示南北分量,風的u分量和v分量的兩個公式如下:
u=((y1-y0)×r×tavg×ln(p0/p1))/(2×omega×sin(lat)×(d^(2))),
v=((x1-x0)×r×tavg×ln(p1/p0))/(2*omega×sin(lat)×(d^(2)))
其中:(y1-y0)為當前位置和另一個參考點之間的距離的南北分量的差值,以米為單位;
(x1-x0)為當前位置和另一個參考點之間的東西向分量的差值,以米為單位;
r為干燥空氣的平均氣體常數,為287焦耳/千克*開氏度;
tavg為當前位置和另一個參考點之間的平均溫度,單位為開氏溫標;
p0為當前所在位置的大氣壓力;
p1為另一個參考點處的大氣壓力;
omega為地球旋轉的角速度=7.292×10^(-5)倒數秒;
sin(lat)為當前所在位置的緯度的sin函數;
d為當前位置與另一個參考點之間的距離,以米為單位。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟6)中的矢量風數據投影方法如下:采用雙線性內插先在x軸上執行線性插值,然后再在y軸上執行線性插值,盡管每個步驟在采樣值和位置中是線性的,但是內插作為整體不是線性的,而是在采樣位置的二次方,為了獲取函數f在點(x,y)上的值,已知四個點q11=(x1,y1),q12=(x1,y2),q21=(x2,y1)和q22=(x2,y2)的f的值,我們首先在x方向進行線性插值,產生:
再通過在y方向上內插來獲得期望的估計:
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟7)中的有限差分近似如下:首先投影坐標(x,y)相對于球面坐標(lat,lon)的所有四個一階導數=(phi,lambda):dx/d(phi),dx/d(lambda),dy/d(phi),dy/d(lambda),在距離h=10-5.2弧度處使用一階中心有限差分估計,要在點(phi,lambda)獲得dx/d(phi),投影點
(phi-h/2,lambda)-->(x0,y0)
(phi+h/2,lambda)-->(x1,y1)
使用估計值
dx/d(phi)=(x1-x0)/h
dy/d(phi)=(y1-y0)/h
同樣,投影點
(phi,lambda-h/2)-->(x2,y2)
(phi,lambda+h/2)-->(x3,y3)
并使用估計
dx/d(lambda)=(x3-x2)/h
dy/d(lambda)=(y3-y2)/h,
從上述衍生物連同斯奈德公式,可以獲得在(phi,lambda)的tissotindicatrix的軸的長度及其方向;根據地圖的大小來確定比例因子,找到地圖上的典型ti的大小,并縮放,使得那些ti將大約為地圖的6%;以相同的量重新縮放所有的ti,因此它們可以被比較,并且將每個重新縮放在其自己的中心附近(其通過第五投影(phi,lambda)→(x,y)。
所述的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其特征在于步驟8)中的手勢交互技術如下:
1)leapmotion首先從雙目攝像頭采集操作者手勢動作的左右視覺圖像;
2)經過立體標定后獲取經過校準的立體圖像對后,進行立體匹配,獲得視差圖像;
3)再利用攝像機的內參數及外參數進行三角計算獲取深度圖像,然后對左或右視覺圖像使用手勢分割算法處理,分割出人手所在的初始位置信息;
4)預先設定閾值,當人手左右水平移動超過閾值,即對地球進行水平移動;當人手豎直移動超過閾值,即對地球進行豎直移動;人手五指握拳,實現縮小操作;人手由拳展開,實現放大操作;手掌旋轉超過閾值角度,即對地球進行旋轉。
通過采用上述技術,與現有技術相比,本發明的有益效果如下:
本發明針對現有的氣象數據可視化的局限性,依據設計方案,通過采用leapmotion增強了沉浸式環境下的交互性,實現了手勢操作的相關交互設定,結合vr技術能夠利用計算機生成較為真實的虛擬環境,借助于processing的可視化三維技術,更加逼真地模擬了全球氣候變化,突破了傳統的二維顯示的局限性,增加了模型和數據的感知性和真實性,獲得更高層次的信息細節,使用者不僅能夠真實的感覺到研究的對象近在眼前,而且還能通過手勢操作研究對象,從而構建了一個直觀的空間數據可視化分析環境,它針對三維矢量場數據,設計了粒子對流方法用動畫表達矢量場數據,最后實驗可視化效果明顯。本發明的方法更加逼真地模擬了全球氣候變化,突破了傳統的二維顯示的局限性,增加了模型和數據的感知性和真實性,獲得更高層次的信息細節,使用者不僅能夠真實的感覺到研究的對象近在眼前,而且還能通過手勢操作研究對象,從而構建了一個直觀的空間數據可視化分析環境。
附圖說明
圖1是本發明方法的流程圖;
圖2是本發明可視化案例示意圖;
圖3是本發明手勢定義圖。
具體實施方式
下面結合說明書附圖對本發明的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法進行詳細說明。
如圖1所示,本發明的基于vr及手勢交互技術的全球氣候矢量場數據可視化方法,其矢量場數據包括矢量風、洋流等,由于洋流的可視化方法與矢量風近似,下面僅以對矢量風可視化實施過程進行說明。它包括在processing中導入oculusrift庫,然后搭建一個3d環境,設計包含一個地球和宇宙背景的場景,將從naturalearth獲取的地圖數據添加到所設計的地球上,然后從美國國家氣象局操作的全球預報系統(gfs)上下載所需的矢量風數據,對獲得的數據文件進行解碼,隨后對數據進行風向快速參考,用于轉換向量風分量、速度和方向,進行地轉風近似求解,網格點采用雙線性插值,將矢量風投影到所設計的地球上,有限差分近似用于在插值過程期間估計該失真,確保風粒子路徑被正確渲染,最后在processing中導入leapmotion的庫,根據需要定義各種手勢實現交互八個步驟。具體如下:
步驟1)導入用于processing的oculusrift庫:oculusrift.pde,該庫目前是以pde格式發布的。搭建3d環境,設計了一個場景并根據球面體繪制方法構造一個球形代理幾何,所述球面體繪制方法如下:球面體繪制方法基于傳統的光線投射算法,采用球面坐標表達構造一個球形代理幾何,并以球面坐標系的三個空間維度坐標作為紋理坐標,以歸一化后的三維體數據作為紋理坐標,以所述球形代理幾何作為載體構造三維體數據的三維體紋理,而在繪制過程前,又將球面坐標轉換回直角坐標表達,通過求解二次方程計算投射光線與代理幾何的交點;
步驟2)獲取地圖數據,并對地圖數據進行預處理,再繪制到步驟1)設計場景中的球體上,對步驟1)設計場景中的球體,地圖數據由naturalearth提供,但必須轉換為topojson格式,同時需安裝gdal和topojson;所述的地圖數據預處理方法如下:將所獲取的地圖數據為geojson格式轉換為d3.js適用的topojson格式,即首先在processing中安裝gdal和topojson,然后將geojson數據文件中邊界線記錄次數改為一次,且將浮點數據轉換為整數形式;
步驟3)獲取可視化的矢量風數據;
天氣數據由美國國家氣象局操作的全球預報系統(gfs)生成。預測每天生成四次,可從nomads下載。這些文件是grib2格式,包含超過300條記錄。選擇這些記錄中的幾個來可視化特定等壓線上的風力數據,對天氣數據預處理,將步驟(3)中氣象數據grib2文件的數據解碼為json,需使用netcdf-javagrib解碼器;
步驟4)對步驟3)中的數據進行風向快速參考,用于轉換向量風分量,速度和方向,所述風向快速參考方法如下:由于所得到的氣象風數據以角度表示,為方便計算,將角度轉化成度,通過乘以dperr(180/π=57.29578)將角度轉換為度,并通過乘以rperd(π/180=0.01745329)將角度轉換為弧度:
地理風坐標系:ugeo,vgeo;
+ugeo分量代表風向東,即西風;-ugeo表示風向西,即東風;
+vgeo是風向北,即南風;
地理風向:dirgeo是相對于真正北方的方向,其中0=北,90=東,180=南,270=西,dirgeo=atan2(-ugeo,-vgeo)*dperr=270-(atan2(vgeo,ugeo)*dperr);
水平風速spd:spd=sqrt(ugeo*ugeo+vgeo*ugeo);要從dirgeo和spd轉換為ugeo和vgeo:ugeo=-spd*sin(dirgeo*rperd);vgeo=-spd*cos(dirgeo*rperd);
步驟5)對經步驟4)處理后獲得轉換后的向量風分量再進行地轉風近似求解,所述地轉風近似求解如下:步驟4)的風向快速參考轉換了向量風分量,近似被分解成其兩個水平分量u和v,u分量表示風的東西分量,v分量表示南北分量,風的u分量和v分量的兩個公式如下:
u=((y1-y0)×r×tavg×ln(p0/p1))/(2×omega×sin(lat)×(d^(2))),
v=((x1-x0)×r×tavg×ln(p1/p0))/(2*omega×sin(lat)×(d^(2)))
其中:(y1-y0)為當前位置和另一個參考點之間的距離的南北分量的差值,以米為單位;
(x1-x0)為當前位置和另一個參考點之間的東西向分量的差值,以米為單位;
r為干燥空氣的平均氣體常數,為287焦耳/千克*開氏度;
tavg為當前位置和另一個參考點之間的平均溫度,單位為開氏溫標;
p0為當前所在位置的大氣壓力;
p1為另一個參考點處的大氣壓力;
omega為地球旋轉的角速度=7.292×10^(-5)倒數秒;
sin(lat)為當前所在位置的緯度的sin函數;
d為當前位置與另一個參考點之間的距離,以米為單位;
步驟6)將步驟5)處理后的數據投影到步驟2)的球體上,該的矢量風數據投影方法如下:采用雙線性內插先在x軸上執行線性插值,然后再在y軸上執行線性插值,盡管每個步驟在采樣值和位置中是線性的,但是內插作為整體不是線性的,而是在采樣位置的二次方,為了獲取函數f在點(x,y)上的值,已知四個點q11=(x1,y1),q12=(x1,y2),q21=(x2,y1)和q22=(x2,y2)的f的值,我們首先在x方向進行線性插值,產生:
再通過在y方向上內插來獲得期望的估計:
步驟7)有限差分近似用于在步驟(7)插值過程期間估計該失真,確保風粒子路徑被正確渲染,得到可視化結果;
需要投影坐標(x,y)相對于球面坐標(lat,lon)的所有四個一階導數=(phi,lambda):dx/d(phi),dx/d(lambda);dy/d(phi),dy/d(lambda)。關于tissotindicatrix(天梭指示線)的其它信息是根據這些(使用一些算術和三角函數:余弦,主反正弦和主反正切)計算的。計算需要描述地球的形狀,為了獲得最大精度,使用具有半長軸a和偏心率e的橢圓體基準;
步驟7)的有限差分近似風粒子路徑方法如下:
步驟7-1)使用一階中心有限差分估計在距離h=10^(-5.2)弧度;
步驟7-2)在點(phi,lambda)獲得dx/d(phi),讓投影點
(phi-h/2,lambda)-->(x0,y0)
(phi+h/2,lambda)-->(x1,y1)
使用估計值
dx/d(phi)=(x1-x0)/h
dy/d(phi)=(y1-y0)/h
同樣,投影點
(phi,lambda-h/2)-->(x2,y2)
(phi,lambda+h/2)-->(x3,y3)
并使用估計
dx/d(lambda)=(x3-x2)/h
dy/d(lambda)=(y3-y2)/h
步驟7-3)從上述衍生物連同斯奈德公式,可以獲得在(phi,lambda)的tissotindicatrix的軸的長度及其方向;
步驟7-4)根據地圖的大小來確定比例因子,找到地圖上的典型ti的大小,并縮放,使得那些ti將大約為地圖的6%;
步驟7-5)以相同的量重新縮放所有的ti,因此它們可以被比較,并且將每個重新縮放在其自己的中心附近(其通過第五投影(phi,lambda)→(x,y));
步驟8,交互設計,在processing中導入leapmotion的庫,根據需求采用手勢交互技術定義各種操作手勢,實現全球氣候矢量場數據可視化,操作手勢包括水平豎直移動、旋轉、放大及縮小;
1)經過立體標定后獲取經過校準的立體圖像對后,進行立體匹配,獲得視差圖像;
2)再利用攝像機的內參數及外參數進行三角計算獲取深度圖像,然后對左或右視覺圖像使用手勢分割算法處理,分割出人手所在的初始位置信息;
3)預先設定閾值,當人手左右水平移動超過閾值,即對地球進行水平移動;當人手豎直移動超過閾值,即對地球進行豎直移動;人手五指握拳,實現縮小操作;人手由拳展開,實現放大操作;手掌旋轉超過閾值角度,即對地球進行旋轉。
leapmotion手勢設置如下:手掌左右水平移動控制地球水平移動;手掌上下豎直移動控制地球豎直移動;手掌五指握拳控制地球收縮;手掌五指展開控制地球放大;手掌轉動控制地球旋轉。