于莉莉 蘇曉光 張磊
摘要:視景裁剪一直是加速圖形繪制的重要手段。一種方法是將場景組織成場景圖,讓視景體與場景圖節(jié)點包圍體層次結構進行求交測試,剔除不相交的節(jié)點;另一種方法是直接計算視野范圍,根據(jù)所得范圍選擇要顯示的對象進行繪制。對三維GIS可視化中的矢量繪制來說,第二種方法是比較合適的。本文基于第二種方法,針對平面大地與球面大地分別提出了一個精確、快速的視野計算方法,有效地提高了GIS數(shù)據(jù)的渲染速度。
關鍵詞: 視景裁剪;場景圖;地理信息系統(tǒng);可視化
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)13-0260-03
Calculation of the Visible Region of the Large Earth Surface in Three DimensionaL GIS
YU Li-li, SU Xiao-guang*, ZHANG Lei
(Information and Electronic Technology Institute,Jiamusi University, Jiamusi 154007, China)
Frustum culling is always an important method to accelerate graphic drawing. One method is first organizing geomtry objects into a scene graph, then removing the nodes that is not intersectant between the visible area and the hiberarchy of bounding volume of nodes of scene graph. Another method is first calculating the rang of visible area directly, then drawing the objects that is in the rang. For vector data visualization in 3D of GIS ,the second method is more suitable. This article,based on the second method,present respectively an accurate, rapid calculating method of visible area aim at flat land and spherical land, effectively improve the rendering speed of GIS data.
Key words: frustum culling; scene graph; GIS; visualization
在三維場景繪制中,OpenGL等底層API提供的面片級視景裁剪并不能減輕渲染流水線的負擔。因此大多數(shù)三維應用都是讓場景圖(Scene Graph)來管理場景中的對象及屬性,進而提供對象級別的視景裁剪,來達到對大規(guī)模場景的實時渲染。在三維GIS中,視景裁剪也是實現(xiàn)對大規(guī)模地形實時渲染的關鍵技術之一。本文針對GIS數(shù)據(jù)的快速三維可視化,提出了球面大地可視區(qū)域的快速、精確算法,使得在球面上高效繪制矢量數(shù)據(jù)非常方便。
1 定義域和值域
雖然可以通過一些關鍵點來表示球面可視區(qū)域的邊界,但這些關鍵點仍需要代數(shù)方法求解。由于整個場景就是一個地球,我們把它擺放在世界坐標系的原點,北極朝向Z軸,X軸穿過本初子午線。這樣,整個球面方程簡化成x2 + y2 +z2 = R2。但是一個完美的攝像機應該可以擺放在空間中的任何位置,朝向也是隨意的。這導致視錐體的四個側面方程難以求解。因此,我們用坐標變換把整個場景轉到視坐標系中,來簡化視錐體側面的求解與表示。如圖1所示(紅、綠、藍三條線分別代表X,Y,Z三軸)。
這時每個側面都過原點,方程都有aX+bY+cZ = 0的形式,而且a,b,c三者必有一個為0。以這種形式與球面方程||P – O0|| = R聯(lián)立計算,仍然會在邊界點的確定上碰到麻煩,因為在視坐標系中地球成了可以任意擺放的對象。
現(xiàn)在考慮用球坐標系。
為了方便,我們把球坐標系的起始位置放在視坐標系的-z軸上。橫向變量角為[α],以-z軸為起始,繞+y軸旋轉,逆時針為正;縱向變量角為[φ],也是以-z軸為起始,繞+x軸旋轉,逆時針為正。那么 視錐體的定義域為:
([-hFov≤α≤hFov],[-vFovy≤φ≤vFovy]),
值域為[near≤ρ≤far ],其中near和far分別是近裁剪面與遠裁剪面的值。
地球的定義域是一個圓E,它的邊界正好對應著那一圈“地平線”。這個定義域圓的半徑Re即是前面圖中紫色圓錐頂角的一半。
Re=arcsin(RG/D),其中RG為地球半徑,D為視點到地球球心的距離
圓心坐標用([αe,φe])來表示,它的求解要復雜一點。先回到視直角坐標系,設地球球心在視坐標系下的坐標為(xe, ye ,ze),根據(jù)攝像機的姿態(tài)可以得到世界坐標系到視坐標系的轉換矩陣
M = [sxux-fxpxsyuy-fypyszuz-fzpz0001],
其中向量u為向上方向,f是視線朝向,s由[f×u]得到,(Px,Py,Pz)為視點位置。
在世界坐標系中地球球心的齊次坐標為(0,0,0,1),在視坐標系中變?yōu)?/p>
(xe, ye ,ze,1)T = M-1*(0,0,0,1)T
下面計算([αe,φe])。
若xe>0則[αG]= arccos([zex2e+z2e]),否則[αG]= 2[π] - arccos([zex2e+z2e]),其中[αG]是從+z軸繞+y軸逆時針旋轉到達球心位置時所走過的角度。但[αG]不是我們想要的[αe],因為我們的球坐標系是以-z軸為起始線的,所以它們倆相差一個[π]。即:
[αe]= [αG] - [π]。
[φe]的求解比較簡單,公式為:
[φe] = arcsin(ye/D)。
至此,定義域全部求解完畢。
顯然,地球與視錐體相交等價于它們的定義域相交。定義域的交線正好對應空間中那條復雜的可視區(qū)域邊界線。
在得到定義域中矩形和圓的交線后,進行采樣,得到一系列采樣點。因為是球面坐標系的定義域,所以這些采樣點對應一系列從原點出發(fā)的射線。這時就可以回到直角坐標系,讓它們與球面相交,交點即是視空間中可視區(qū)域邊界線的關鍵點。然后把這些關鍵點轉到世界坐標,再轉成地理坐標,最后就得到地理范疇中的可視區(qū)域多邊形。
2 兩個定義域的求交與采樣
如圖2所示,矩形ABCD為視錐體在球面坐標系的定義域;圓E為地球的定義域;F、G為圓與矩形的交點;沒有字母的點即為我們的采樣點。很明顯,環(huán)BCFG是我們所需要的東西。
由于采樣和求交是密不可分的,不同的采樣策略可能會導致不同的求交算法。一種策略如圖所示,在矩形的每條邊上等距取四個點,在圓E與矩形的相交弧上,以固定度數(shù)為一個間隔定義一系列的點。有些點如A和D將落在相交環(huán)的外面,必須被屏蔽掉。
現(xiàn)在考慮求解矩形和圓的相交環(huán)。一種方法是先把圓采樣成一個近似多邊形,再用圖形學中成熟的多邊形裁剪算法與矩形求交。因為我們已經(jīng)把矩形放到一個相當有利的位置,所以采用解析幾何的方法會更加快速和精確。先把交點求出,然后再從相交弧上采樣。
具體的求交算法這里不再闡述,主要思路是先進行矩形和圓的相交判斷,然后再求矩形每一條邊與圓的交點,最后把交點存在一個順序表中。
3 在視直角坐標系中計算可視區(qū)域邊界的關鍵點。
有了定義域相交環(huán),可以很容易地求出環(huán)上每一個點在視三維空間中的對應點,后者構成視直角坐標系中的可視區(qū)域邊界。
環(huán)上每一個點對應一條從原點出發(fā)的射線,用參數(shù)方程:
x = t cos[φ]sin[α]
y = t sin[φ]
z = t cos[φ]cos[α]
來表示它(時刻記住y軸為向上方向)。
然后,與地球球面方程:
(x – xe)2 + (y – ye)2 + (z – ze)2 = R2
聯(lián)立,得到一個有效根,然后根據(jù)t求得x,y,z,它就是視直角坐標系中的可視區(qū)域邊界上的一個關鍵點。把所有關鍵點求出,最后就可得到視坐標系中的可視區(qū)域邊界多邊形。
4 轉換到世界坐標系
設一個點在視坐標系的齊次坐標為(xv,yv,zv,1)T,那么它在世界坐標系下的齊次坐標:
(x,y,z,1)T = M*(xv,yv,zv,1)T
這一步還要考慮一個問題,就是極點處于邊界多邊形之內(nèi)時,需要讓極點作為一個頂點加入多邊形中。否則將會導致下一步生成的經(jīng)緯坐標多邊形不準確。
5 把世界坐標轉成經(jīng)緯度坐標
設(L,B,H)為(x,y,z)對應的經(jīng)緯度坐標,則:
L = [arccos(x/x2+y2)] ,若y<0,則L取相反數(shù)。
B = [arcsin(z/R)]
H = 0
此時,用經(jīng)緯度坐標表示的球面可視區(qū)域多邊形就得到了。用它可以對現(xiàn)有的地理信息訪問引擎進行多邊形查詢了。
6 結論
以平面視野來代替視景體進行二維裁剪對大范圍地形實時漫游提供了很好的支持,可見的那部分地理區(qū)域來裁剪GIS數(shù)據(jù),把裁剪結果送給渲染流水線進行繪制。
為了降低復雜度,絕大部分的平面裁剪算法都采用了不精確的視野模型。其中一種典型算法是把視野近似成以視點為圓心的扇形。這樣做雖然簡化了裁剪計算,但在渲染大規(guī)模場景時對渲染流水線增加的負擔往往更大。因此在這種情況下,在保證低復雜度的前提下,針對平面大地與球狀大地分別給出了一種比較精確的平面視野計算方法并對視野進行更加精確的描述是很必要的。
參考文獻:
[1]崔慶生. 數(shù)字城市中的若干空間分析技術及可視化實現(xiàn)方法研究[J]. 西安電子科技大學學報. 2003
[2]Richard S. Wright, Jr. Michael Sweet. OpenGL Super Bible 2[M], 2000
[3]孫家廣. 計算機圖形學[M]. 3版.北京:清華大學出版社, 1998
[4]OpenGL performer Programmers guide, www.sgi.com
[5]劉勇奎, 高云, 黃有群. 一個有效的多邊形裁剪算法[J]. 軟件學報, 2003, 14(4)