圣長軍,王家潤,王玉玫
(華北計(jì)算技術(shù)研究所,北京100083)
由于三維戰(zhàn)場態(tài)勢提供了豐富的空間信息和逼真的戰(zhàn)場環(huán)境,因此相比于傳統(tǒng)的二維戰(zhàn)場態(tài)勢,它必將在現(xiàn)代信息化戰(zhàn)爭中占據(jù)更加重要的作用。作為三維戰(zhàn)場態(tài)勢系統(tǒng)的重要組成部分,三維標(biāo)號(hào)的生成是國內(nèi)外研究的熱點(diǎn)。目前國內(nèi)還沒有針對(duì)三維標(biāo)號(hào)的顯示制定統(tǒng)一的圖形標(biāo)準(zhǔn),這使得三維標(biāo)號(hào)的制作方法多種多樣,現(xiàn)有的方法都是對(duì)不同類型的標(biāo)號(hào)使用不同的生成技術(shù)。例如點(diǎn)標(biāo)號(hào)的制作一般采用Billboard(公告板)技術(shù),文獻(xiàn)[1]中的點(diǎn)標(biāo)號(hào)就是利用公告板技術(shù)制作而成,它采用改進(jìn)的浮雕算法處理軍標(biāo)圖像,增強(qiáng)了公告板顯示的立體感。對(duì)于線面標(biāo)號(hào)的生成,主要采用三類方法:基于RTT(render to texture)技術(shù)的繪制方法、基于矢量數(shù)據(jù)的繪制方法和基于模板陰影體技術(shù)的繪制方法。文獻(xiàn)[2]中介紹了這三類方法的實(shí)現(xiàn)過程,并敘述了它們的優(yōu)缺點(diǎn),本文不展開敘述。
鑒于三維標(biāo)號(hào)生成的這種復(fù)雜局面,本文提出一種完全基于矢量數(shù)據(jù)的繪制方法。該方法不但可以用于線面標(biāo)號(hào)的生成,而且對(duì)點(diǎn)標(biāo)號(hào)的生成同樣適用;該方法統(tǒng)一了不同類型標(biāo)號(hào)的生成過程,同時(shí)避免了Billboard中立體感缺失和RTT技術(shù)下紋理走樣的問題。
本文的三維標(biāo)號(hào)生成方法是以現(xiàn)有的二維標(biāo)號(hào)算法為基礎(chǔ),通過對(duì)其圖元結(jié)果進(jìn)行改造,獲得相應(yīng)的三維繪制基礎(chǔ)圖元,然后使用OpenSceneGraph[3](OSG)構(gòu)造出三維標(biāo)號(hào),最后再進(jìn)行一些特效處理,圖1所示為二、三維標(biāo)號(hào)的繪制流程。
眾所周知,操作系統(tǒng)提供的圖形設(shè)備接口 (如windows下的GDI+)只能用于繪制諸如文字、點(diǎn)、線段、多邊形、橢圓、圓弧、Bezier曲線等基礎(chǔ)圖元。因此,要繪制任意一個(gè)二維標(biāo)號(hào),必須先將它分解成這些基礎(chǔ)圖元,再調(diào)用圖形設(shè)備接口進(jìn)行跟蹤繪制。
圖1 二、三維標(biāo)號(hào)的繪制流程
參見圖1可知二維標(biāo)號(hào)的繪制過程:首先標(biāo)號(hào)經(jīng)過二維標(biāo)號(hào)算法庫被分解為基礎(chǔ)圖元,然后在二維圖形系統(tǒng)中進(jìn)行繪制和顯示。
其中,二維標(biāo)號(hào)算法庫封裝了對(duì)所有二維標(biāo)號(hào)的屬性解釋和圖元分解過程,它的意義在于屏蔽了標(biāo)號(hào)形狀的差異,使得圖形設(shè)備接口能夠順利繪制出二維標(biāo)號(hào)。由此可見,二維標(biāo)號(hào)算法是整個(gè)二維標(biāo)號(hào)生成過程中的核心部分。
圖2以某實(shí)際標(biāo)號(hào)為例,說明該標(biāo)號(hào)經(jīng)過二維標(biāo)號(hào)算法庫處理后分解成二維繪制基礎(chǔ)圖元的結(jié)果。由圖可知,為了在二維態(tài)勢下顯示該符號(hào),二維圖形系統(tǒng)只需依次繪制4個(gè)基礎(chǔ)圖元即可,包括一個(gè)圓、一段圓弧和兩條線段。
圖2 標(biāo)號(hào)分解成基礎(chǔ)圖元
三維標(biāo)號(hào)的生成方法采取了與二維標(biāo)號(hào)類似的思路,該方法關(guān)鍵在于如何將標(biāo)號(hào)分解成為三維繪制基礎(chǔ)圖元。本文選擇充分利用現(xiàn)有的二維標(biāo)號(hào)算法庫技術(shù),盡管它最終產(chǎn)生的只是二維的圖元數(shù)據(jù),但是通過對(duì)這些二維圖元數(shù)據(jù)進(jìn)行適當(dāng)改造,可以獲得標(biāo)號(hào)的三維圖元數(shù)據(jù)。
在將二維圖元數(shù)據(jù)改造成三維圖元數(shù)據(jù)的具體實(shí)施過程中還需解決如下幾個(gè)問題:①如何擴(kuò)展三維標(biāo)號(hào)特有的屬性數(shù)據(jù);②如何將二維繪制基礎(chǔ)圖元的頂點(diǎn)數(shù)據(jù)從二維平面變換到三維空間;③如何映射二維繪制基礎(chǔ)圖元與三維繪制基礎(chǔ)圖元的類型關(guān)系。
針對(duì)以上3個(gè)問題,提出的解決方案如下:
(1)三維標(biāo)號(hào)的屬性結(jié)構(gòu)設(shè)計(jì)
三維標(biāo)號(hào)的許多屬性數(shù)據(jù)是二維標(biāo)號(hào)所沒有的,比如標(biāo)號(hào)的厚度屬性、標(biāo)號(hào)控制點(diǎn)的高度屬性 (二維標(biāo)號(hào)中只有經(jīng)緯度信息)、標(biāo)號(hào)的光照屬性、點(diǎn)標(biāo)號(hào)面向屏幕顯示屬性以及線面標(biāo)號(hào)與地形匹配屬性等等。為了不影響對(duì)原來二維標(biāo)號(hào)算法庫的使用,我們?nèi)匀粚⒃械亩S標(biāo)號(hào)屬性獨(dú)立保存,將其作為二、三維標(biāo)號(hào)的公共屬性,而將三維標(biāo)號(hào)的特有屬性作為擴(kuò)展屬性來保存。標(biāo)號(hào)的屬性結(jié)構(gòu)設(shè)計(jì)層次如圖3所示。
圖3 標(biāo)號(hào)屬性數(shù)據(jù)的UML設(shè)計(jì)
(2)圖元數(shù)據(jù)的三維坐標(biāo)變換
二維繪制基礎(chǔ)圖元中的頂點(diǎn)數(shù)據(jù)都是平面的,首先將其一一映射到三維坐標(biāo)系中的xy平面,如p(x,y)→p'(x,y,0),這便形成了三維空間中可繪制的頂點(diǎn)形式。然后再通過對(duì)映射后的三維頂點(diǎn)數(shù)據(jù)進(jìn)行平移、旋轉(zhuǎn)、縮放等一系列幾何變換,三維標(biāo)號(hào)就能呈現(xiàn)出各種復(fù)雜的顯示樣式。
(3)基礎(chǔ)圖元類型的三維映射
最后還需知道,三維圖形繪制系統(tǒng)中的基礎(chǔ)圖元類型相比二維來說要少。OSG中可繪制的圖元類型只包括6種:文字、點(diǎn)、線段、三角形、四邊形和 (凸)多邊形。其他任何復(fù)雜的圖形都是通過這幾種基礎(chǔ)類型組合而成。對(duì)照二維標(biāo)號(hào)算法庫分解出的基礎(chǔ)圖元可知,除了相同類型的圖元可以一一映射外,像橢圓、圓弧、Bezier曲線等在三維態(tài)勢下仍然無法直接繪制,還需要對(duì)它們做進(jìn)一步的分解工作,將它們分解成OSG中可繪制的線段類型。
通過以上 (1)、(2)、(3)三個(gè)步驟,最終獲得了標(biāo)號(hào)的三維繪制基礎(chǔ)圖元。以上三個(gè)步驟相當(dāng)于組成了三維標(biāo)號(hào)算法庫,顯然,這種以二維標(biāo)號(hào)算法庫為基礎(chǔ)并對(duì)其結(jié)果進(jìn)行分解和坐標(biāo)轉(zhuǎn)換的方法很容易實(shí)現(xiàn),工作量也非常小。因此,更多的精力可被集中于后續(xù)的三維圖元構(gòu)造以及標(biāo)號(hào)與地形匹配、光照特效處理等方面。
由前面的敘述可知,三維繪制基礎(chǔ)圖元是在二維繪制基礎(chǔ)圖元的結(jié)果上改造而得。對(duì)比二者中的類型可知,需要將二維繪制基礎(chǔ)圖元中的橢圓、圓弧和Bezier曲線分解成連續(xù)線段,另外,還需要對(duì)面狀標(biāo)號(hào)進(jìn)行三角剖分。
下面簡要介紹這些分解方法:
(1)橢圓逼近方法
Windows系統(tǒng)下,二維圖形設(shè)備接口GDI+提供了函數(shù)DrawEllipse,它可以很方便的繪制橢圓。但在三維系統(tǒng)中只能采用連續(xù)線段逼近的方式來繪制橢圓,由橢圓參數(shù)方程:(其中a為橢圓長半軸,b為橢圓的短半軸,a、b>0),可得在其區(qū)間取 n等分的頂點(diǎn)依次相連就可以逼近橢圓;當(dāng)n取值越大,橢圓也就越逼真,但相應(yīng)的計(jì)算代價(jià)也越大。
弧形屬于橢圓的一部分,只是θ的取值為弧的起始角度和結(jié)束角度之間,θ∈[θs,θe]。圓也屬于特殊的橢圓(此時(shí)橢圓方程中a=b),因此也歸為橢圓類。
(2)貝塞爾曲線構(gòu)造
同樣的,GDI+中也提供了函數(shù)DrawBezier來直接繪制三次貝塞爾曲線,但在三維系統(tǒng)中必須將其分解為連續(xù)線段才能繪制,利用Bezier曲線參數(shù)方程
其中pi(i=0,1,…,n)表示Bezier曲線的一系列控制頂點(diǎn),Bi,n(t)是 Bernstein基函數(shù)。對(duì)于三次 Bezier曲線,n=4,且點(diǎn)p0和p3為曲線兩端點(diǎn)。
線面標(biāo)號(hào)中實(shí)際應(yīng)用情況是,對(duì)于多個(gè)控制點(diǎn)Ci(i=0,1,2,…)需要構(gòu)造出經(jīng)過所有Ci控制點(diǎn)的光滑曲線,本文使用了分段連續(xù)三次 Bezier曲線的構(gòu)造方法[4],如圖4所示。
圖4 分段連續(xù)三次Bezier曲線控制點(diǎn)構(gòu)造
步驟如下:①在相鄰的兩個(gè)控制點(diǎn)Ci'和Ci″之間構(gòu)造兩個(gè)插入控制點(diǎn)Pi'、Pi″,生成一段Bezier曲線;②插入控制點(diǎn)的構(gòu)造要滿足使相鄰的兩段Bezier曲線在其過渡點(diǎn)Ci保持C1連續(xù)。
(3)面狀標(biāo)號(hào)的三角剖分
對(duì)于面狀標(biāo)號(hào)的顯示,GDI+中提供了函數(shù)DrawPath,該函數(shù)只要結(jié)合不同的畫刷就能繪制出單色填充或漸變填充的面狀標(biāo)號(hào)。而三維系統(tǒng)中可繪制的填充形狀只能為凸多邊形,但面狀標(biāo)號(hào)中存在較多的非凸多邊形,必須對(duì)其進(jìn)行三角剖分后方可正確的填充該標(biāo)號(hào)。
對(duì)于單色填充的面狀標(biāo)號(hào),只要直接使用簡單多邊形的三角剖分[5]方法,將面狀標(biāo)號(hào)分解成三角形后給其綁定相同的顏色即可,效果如圖5所示。
對(duì)于漸變色填充的面狀標(biāo)號(hào),則需要采用更為細(xì)膩的三角剖分算法。圖6所示,采用了一種滿足顏色漸變需求的規(guī)則三角剖分方法,結(jié)果表明鉗擊箭頭漸變效果較好。
圖6 滿足顏色漸變需求的規(guī)則三角部分
標(biāo)號(hào)最終被分解成三維繪制基礎(chǔ)圖元,包括:位圖、文字、線段、三角形、四邊形和 (凸)多邊形。OSG提供了對(duì)所有這些圖元進(jìn)行繪制的方法,其中針對(duì)文字還提供了兩種類型:Text和Text3D(平面文字和立體文字),為了提高繪制效率本文使用平面文字的繪制方式。
由這些基礎(chǔ)圖元數(shù)據(jù)已經(jīng)可以繪制平面的三維標(biāo)號(hào),此時(shí)再加入寬度和厚度屬性就能夠構(gòu)造出三維立體標(biāo)號(hào)。由解析幾何知識(shí)可知,二維繪制基礎(chǔ)圖元中的一條線段映射到三維空間中的xy平面后仍然是一條線段。要將這條線段擴(kuò)展成立體的形狀,需經(jīng)過如下兩個(gè)步驟:①將線段在xy平面上向兩側(cè)拉伸出寬度;②將線段在z軸方向上拉伸出厚度。圖7中 (a)為擴(kuò)展前的點(diǎn)標(biāo)號(hào),(b)為擴(kuò)展后的立體效果,(c)為立體標(biāo)號(hào)的骨架顯示效果。
圖7 三維立體標(biāo)號(hào)
步驟①采用平行線算法,如圖8所示,對(duì)于連續(xù)線段ABCD,先在其右側(cè)構(gòu)造平行線ArBrCrDr,假設(shè)標(biāo)號(hào)線寬為w,則AAr垂直于AB,且為B點(diǎn)處的角平分線,且點(diǎn)Cr屬于中間點(diǎn),其求解方法與Br相同;點(diǎn)Dr屬于端點(diǎn),其求解方法與Ar相同。同理可在ABCD左側(cè)構(gòu)造出平行線AlBlClDl。
圖8 連續(xù)線段平行線算法示意
至于厚度的拉伸,只需在前一步寬度拉伸基礎(chǔ)上將每個(gè)頂點(diǎn)的高度增加一定值即可。對(duì)平行線每點(diǎn)高度z值增加厚度d后,可得拉伸后的數(shù)據(jù)同理可得平行線AlBlClDl的厚度拉伸數(shù)據(jù)
至此,獲得了四組頂點(diǎn)數(shù)據(jù),并且由每個(gè)頂點(diǎn)數(shù)組所表示的線段都是原線段ABCD在三維空間中的平行線。OSG中只要以GL_QUADS繪制模式將這些頂點(diǎn)數(shù)據(jù)按一定規(guī)則連接成四邊形,就生成了線段的立體模式。需要特別注意的是,指定四邊形時(shí)需要嚴(yán)格確保頂點(diǎn)的繪制順序使得四邊形的法線方向?yàn)橹赶驑?biāo)號(hào)的外部,否則將無法正確地顯示光照效果。
點(diǎn)標(biāo)號(hào)與地形匹配方法非常簡單,只要保證點(diǎn)標(biāo)號(hào)定位點(diǎn)的高度值位于地形上方即可。因此,在標(biāo)繪三維點(diǎn)標(biāo)號(hào)時(shí)需要實(shí)時(shí)的查詢其經(jīng)緯度所在位置對(duì)應(yīng)的地形高程值。
對(duì)于線面標(biāo)號(hào)而言,與地形匹配的方法顯得非常重要,如若線面狀標(biāo)號(hào)不能與地形合理匹配,那么在地形起伏較大的區(qū)域顯示時(shí)易出現(xiàn)懸浮空中和陷入地下的情況。本文使用較為簡單的解決方法——查詢線面標(biāo)號(hào)每個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)經(jīng)緯度位置的高程值。根據(jù)前面的平行線算法介紹可知,實(shí)際需要查詢的高程數(shù)據(jù)只要包括三維基礎(chǔ)圖元數(shù)據(jù)對(duì)應(yīng)的那條主線段 (如圖8中的線段ABCD)上的所有頂點(diǎn)即可,立體擴(kuò)展后各線段相對(duì)這條主線段是固定的,其頂點(diǎn)數(shù)據(jù)可通過平移獲得。以上介紹的這種線面標(biāo)號(hào)與地形匹配的方法,它的實(shí)時(shí)計(jì)算速度基本可以滿足三維態(tài)勢下對(duì)線面標(biāo)號(hào)的繪制要求,但對(duì)于態(tài)勢演播這種需要短時(shí)間內(nèi)進(jìn)行大量標(biāo)號(hào)更新的功能而言,這種方法則延遲較為明顯,這也是本文需要改進(jìn)的地方。文獻(xiàn)[6]中給出了一種基于GPU的方法解決線面狀標(biāo)號(hào)與地形匹配問題,該方法運(yùn)算效率較高,可供讀者進(jìn)一步研究。
圖9為戰(zhàn)場態(tài)勢二維標(biāo)繪系統(tǒng)下的標(biāo)號(hào)效果,圖10為相應(yīng)的三維標(biāo)號(hào)效果。
結(jié)果表明,使用本文方法生成的三維標(biāo)號(hào)顯示效果十分理想,它不僅美觀、立體感強(qiáng),并且顯示效果與二維標(biāo)號(hào)幾乎一模一樣,這也讓其更容易被理解和使用。
圖9 二維態(tài)勢標(biāo)號(hào)效果
本文對(duì)三維標(biāo)號(hào)的生成方法進(jìn)行了研究,提出以二維標(biāo)號(hào)算法庫為基礎(chǔ)生成三維標(biāo)號(hào)的方法,該方法關(guān)鍵在于如何將二維繪制基礎(chǔ)圖元轉(zhuǎn)化成三維繪制基礎(chǔ)圖元。由于二維標(biāo)號(hào)算法庫已經(jīng)封裝了標(biāo)號(hào)差異,這讓本文的三維標(biāo)號(hào)在生成時(shí)不必關(guān)心標(biāo)號(hào)類型,從而極大地減少了三維標(biāo)號(hào)制作生成的復(fù)雜性。同時(shí),因?yàn)槭褂玫氖腔谑噶繑?shù)據(jù)的繪制方式,這也表明運(yùn)用本文方法生成的三維標(biāo)號(hào)非常便于日后的交互編輯工作。
圖10 三維態(tài)勢標(biāo)號(hào)效果
本文還需要進(jìn)一步研究的工作包括三維標(biāo)號(hào)中相鄰圖元在銜接處的處理以及如何提高線面標(biāo)號(hào)與地形匹配的效率。
[1]YANG Qiang,CHEN Ming.Real-time creating and protracting of 3D static unit symbols[J].Computer Engineering and Design,2007,28(14):3419-3421(in Chinese).[楊強(qiáng),陳敏.三維靜態(tài)軍標(biāo)的實(shí)時(shí)生成與標(biāo)繪 [J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(14):3419-3421.]
[2]YU Meijiao,ZHANG Yongsheng,DAI Chenguang.Implement of rendering situation symbol over 3D Terrain [J].Jounal of Geomatics,2008,33(4):40-42(in Chinese).[于美嬌,張永生,戴晨光.實(shí)現(xiàn)復(fù)雜態(tài)勢符號(hào)在三維場景中的繪制[J].測繪信息與工程,2008,33(4):40-42.]
[3]OpenSceneGraph [EB/OL].http://www.openscenegraph.net.
[4]WANG Jiarun,ZHAO Nansong,Hua Wenyuan,et al.Construction of cubic Bezier continuous subsection curve's control points[J].Computer Engineering and Applications,2010,46(22):190-193(in Chinese).[王家潤,趙南松,華文元,等.分段連續(xù)三次Bezier曲線控制點(diǎn)的構(gòu)造算法[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(22):190-193.]
[5]De Berg M.Computational geometry algorithms and applications[M].2nd ed.DENG Junhui,transl.Beijing:Tsinghua University Press,2006:50-72(in Chinese).[計(jì)算幾何-算法與應(yīng)用[M].2版.鄧俊輝,譯.北京:清華大學(xué)出版社,2006:50-72.]
[6]CHEN Hong,TANG Xiaoan,YANG Yaoming,et al.Using display mapping for irregular military symbols rendering[J].Journal of Computer-Aided Design and Computer Graphics,2011,5(23):798-803(in Chinese).[陳鴻,湯曉安.基于位移映射的非規(guī)則軍隊(duì)標(biāo)號(hào)繪制算法 [J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)報(bào),2011,5(23):798-803.]
[7]JIANG Huawen.Design and implementation of 3D military symbol based on B-Spline[D].Jilin:Jilin University,2009:42-34(in Chinese).[姜華文.基于B樣條的三維軍隊(duì)標(biāo)號(hào)的設(shè)計(jì)與實(shí)現(xiàn)[D].吉林:吉林大學(xué),2009:32-34.]
[8]XIAO Bin,WANG Jinshu.Research and implementation of 3D campaign situation display at sea[J].Journal of System Simulation,2008,14(20):3746-3749(in Chinese).[肖濱,王金樹.海上戰(zhàn)役態(tài)勢三維顯示的研究與實(shí)現(xiàn)[J].系統(tǒng)仿真學(xué)報(bào),2008,20(14):3746-3749.]
[9]WANG Rui,QIAN Xuelei.OpenScene Graph 3D rendering engine and practise[M].Beijing:Tsinghua University Press,2009:90-127(in Chinese).[王銳,錢學(xué)雷.OpenSceneGraph三維渲染引擎設(shè)計(jì)與實(shí)踐 [M].北京:清華大學(xué)出版社,2009.90-127.]
[10]XU Zemin,HE Jun.Design and realization of 3D graphics simulation system for battlefield situation[J].Journal of Computer Applications,2009,29(6):313-316(in Chinese).[徐澤敏,何軍.戰(zhàn)場態(tài)勢三維圖形仿真系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009,29(6):313-316.]
[11]XIAO Peng,LIU Gengdai,Xu Mingliang.OpenSceneGraph 3D rendering engine programming guide[M].Beijing:Tsinghua U-niversity Press,2010:289-307(in Chinese).[肖鵬,劉更代,徐明亮.OpenSceneGraph三維渲染引擎編程指南[M].北京:清華大學(xué)出版社,2010:289-307.]
[12]Donald Hearn,Pauline Baker M.Computer graphics with OpenGL[D].3rd ed.CAI Shijie,transl.Beijing:Electronic Industrial University Press,2006:216-242(in Chinese).[Donald Hearn,Pauline Baker M.蔡士杰,等譯.計(jì)算機(jī)圖形學(xué)[D].3版.北京:電子工業(yè)大學(xué)出版社,2006:216-242.]