陳密密
(解放軍61512部隊(duì),北京 100088)
近年來(lái),隨著計(jì)算機(jī)軟硬件及圖像圖形學(xué)技術(shù)的迅速發(fā)展,三維可視化技術(shù)在諸多領(lǐng)域得到了廣泛應(yīng)用。相對(duì)于平面可視化,通過(guò)三維可視化技術(shù)可以獲取全方位、多層面、多維、多尺度的立體感知,提供更全面、更直觀的信息。
三維物體的建模與可視化是三維可視化技術(shù)的重要研究?jī)?nèi)容之一。3DSMax是使用最為普遍、功能較為全面的三維建模軟件。目前較多的三維可視化系統(tǒng)均是使用3DSMax軟件進(jìn)行復(fù)雜物體的建模,輸出存儲(chǔ)模型數(shù)據(jù)的3DS圖形文件,結(jié)合VC編程開(kāi)發(fā)工具和OpenGL、D3D等三維圖形開(kāi)發(fā)接口讀取模型文件,并將三維物體導(dǎo)入到虛擬場(chǎng)景中。結(jié)合近期的三維建模作業(yè)任務(wù),筆者研究發(fā)現(xiàn)3DS模型文件的信息冗余大,重復(fù)存儲(chǔ)的頂點(diǎn)數(shù)據(jù)多,結(jié)構(gòu)比較復(fù)雜〔1〕,尤其是當(dāng)三維模型相對(duì)復(fù)雜、數(shù)據(jù)量比較大時(shí),程序的實(shí)時(shí)運(yùn)行效率會(huì)受到嚴(yán)重影響。
針對(duì)3DS模型文件的缺點(diǎn),本文提出一種新的基于索引機(jī)制的三維模型數(shù)據(jù)組織方法,引入頂點(diǎn)數(shù)組和索引數(shù)組,實(shí)現(xiàn)頂點(diǎn)數(shù)據(jù)的復(fù)用,避免了對(duì)共用頂點(diǎn)的冗余處理;另外,在模型顯示的過(guò)程中使用OpenGL的緩沖區(qū)對(duì)象擴(kuò)展,充分發(fā)揮了圖形硬件的加速特性,大大提高了三維模型的渲染效率。
三維建模的目的是為了在虛擬場(chǎng)景中對(duì)其進(jìn)行可視化展現(xiàn),因而可視化的效率是衡量建模方法優(yōu)劣的關(guān)鍵因素,也是在建模過(guò)程中必須要考慮的重要問(wèn)題。
影響三維可視化效率的主要因素包括:1)模型的復(fù)雜程度。模型的精細(xì)化表達(dá)必然會(huì)造成數(shù)據(jù)量的劇增,從而導(dǎo)致繪制效率的降低,影響整個(gè)可視化系統(tǒng)的運(yùn)行,因而只能在滿足一定繪制速度的條件下建立相應(yīng)精細(xì)程度的幾何外形,以降低可視化的效果為代價(jià)換取可視化效率的提升;2)模型數(shù)據(jù)的組織方式。模型數(shù)據(jù)組織方式描述的是如何對(duì)組成這些物體的幾何圖形數(shù)據(jù)進(jìn)行組織,以實(shí)現(xiàn)渲染效率的最大化。商業(yè)建模軟件如3DSMax、AutoCAD、Maya等,通常都是利用小三角形面片進(jìn)行實(shí)體表面的擬合,將模型描述為若干個(gè)多邊形曲面的聯(lián)合體,這種數(shù)據(jù)組織形式結(jié)構(gòu)簡(jiǎn)單,但卻存在著大量的冗余信息,隨著模型復(fù)雜程度的增加,冗余信息將數(shù)倍于有用的信息,嚴(yán)重影響可視化的效率;3)模型的渲染方式。在OpenGL三維開(kāi)發(fā)環(huán)境中,每渲染一個(gè)幾何圖元都要進(jìn)行許多函數(shù)的調(diào)用。以三角形為組成模型的基本圖元,每個(gè)頂點(diǎn)調(diào)用一次函數(shù),則繪制一個(gè)三角形至少需要3次函數(shù)調(diào)用。另外,由于三維物體除了幾何信息外往往還有紋理信息、顏色信息和光照信息,這進(jìn)一步增加了為每個(gè)頂點(diǎn)調(diào)用的函數(shù),使得繪制一個(gè)三角形時(shí)函數(shù)調(diào)用次數(shù)將增加三四倍。對(duì)于大部分系統(tǒng)而言,函數(shù)調(diào)用的開(kāi)銷(xiāo)很大,因而這種渲染方式會(huì)嚴(yán)重地影響應(yīng)用程序的性能。
通過(guò)上述分析,在保證可視化效果的前提下,改進(jìn)三維模型的數(shù)據(jù)組織方式和渲染方式,是提高可視化效率的有效途徑。為了提高模型數(shù)據(jù)的讀取速度和顯示效率,模型數(shù)據(jù)只包含了三維模型兩方面最為重要和必要的信息,即幾何信息和材質(zhì)信息。為便于更好地描述其組織結(jié)構(gòu),首先闡述以下幾個(gè)定義:
定義1,廣義材質(zhì):材質(zhì)是三維模型與顯示相關(guān)的表面屬性信息的統(tǒng)稱,即模型某一部分顏色和紋理信息的集合。模型的顏色信息包括其環(huán)境光屬性、散射光屬性、鏡面光屬性、鏡面光反射強(qiáng)度屬性、光澤度屬性和自發(fā)光屬性等;紋理信息則主要是指模型紋理貼圖的信息,如貼圖文件的類(lèi)型、大小、名稱以及是否進(jìn)行壓縮等信息。每個(gè)模型都具有一種或多種材質(zhì)。
定義2,廣義多邊形:廣義多邊形是模型中具有相同材質(zhì)的所有三角形面片的集合,各三角形面片之間不需要空間位置上的聯(lián)系,如圖1所示,模型中具有材質(zhì)M1的所有三角形面片 (T1,T2,T5,T11),具有材質(zhì)M2的(T3,T6,T7,T8,T12),具有材質(zhì)M3的(T4,T9,T10)分別構(gòu)成三個(gè)不同的廣義多邊形。模型中材質(zhì)的個(gè)數(shù)和廣義多邊形的個(gè)數(shù)是相同的。
圖1 廣義多邊形的定義
定義3,頂點(diǎn)數(shù)組:頂點(diǎn)數(shù)組是存儲(chǔ)模型中所有各不相同頂點(diǎn)的相關(guān)屬性信息的數(shù)據(jù)集合〔2〕。頂點(diǎn)數(shù)組可以有多個(gè),分別對(duì)應(yīng)頂點(diǎn)的不同屬性信息,如頂點(diǎn)的幾何坐標(biāo)數(shù)組、紋理坐標(biāo)數(shù)組和法向量數(shù)組等。相鄰三角形的共用頂點(diǎn)在頂點(diǎn)數(shù)組中只記錄一次,因而頂點(diǎn)數(shù)組中沒(méi)有冗余信息。
定義4,索引數(shù)組:索引數(shù)組是指定訪問(wèn)頂點(diǎn)數(shù)組順序的數(shù)組。如圖2所示,通過(guò)索引數(shù)組來(lái)指定構(gòu)成幾何圖形的頂點(diǎn)在頂點(diǎn)數(shù)組中的位置,可以對(duì)頂點(diǎn)數(shù)據(jù)(頂點(diǎn)、法向量和紋理坐標(biāo))進(jìn)行復(fù)用,而不是多次存儲(chǔ),會(huì)帶來(lái)相當(dāng)可觀的內(nèi)存節(jié)?。涣硗庠贠penGL中使用索引數(shù)組,還可以得到效率上的優(yōu)化,將這些頂點(diǎn)只轉(zhuǎn)換一次,避免了共用頂點(diǎn)需要多次指定的問(wèn)題,從而節(jié)省了可觀的轉(zhuǎn)換時(shí)間。
圖2 引用頂點(diǎn)數(shù)組的索引數(shù)組
根據(jù)上述定義和描述,設(shè)計(jì)如下的模型數(shù)據(jù)結(jié)構(gòu)進(jìn)行三維模型的表示,不再以簡(jiǎn)單的三角形面片作為擬和模型表面的基本單元,取而代之以具有相同表面材質(zhì)屬性的廣義多邊形作為表示模型組成的最小單元,并建立每個(gè)廣義多邊形的頂點(diǎn)數(shù)組和索引數(shù)組,從而以最小的信息冗余、最少的函數(shù)調(diào)用和最少的轉(zhuǎn)換開(kāi)銷(xiāo)實(shí)現(xiàn)模型三維可視化效率的最大化。該模型數(shù)據(jù)結(jié)構(gòu)可具體描述為如下形式:
近年來(lái)圖形處理器技術(shù)的迅速發(fā)展不僅帶來(lái)了處理速度的提高,還產(chǎn)生了很多全新的圖形硬件技術(shù),各圖形硬件廠商也紛紛通過(guò)擴(kuò)展的方式提供訪問(wèn)圖形硬件新特性的接口,其中頂點(diǎn)緩沖區(qū)對(duì)象擴(kuò)展就是一個(gè)典型的例子,該擴(kuò)展定義了一個(gè)接口允許將不同類(lèi)型的數(shù)據(jù),特別是頂點(diǎn)數(shù)組數(shù)據(jù),存儲(chǔ)在高速的圖形顯卡內(nèi)存中,從而極大地提高數(shù)據(jù)傳輸?shù)男省?〕。
基于索引機(jī)制的三維模型數(shù)據(jù)組織方法可以充分利用圖形顯卡高效的數(shù)據(jù)傳輸特性。在可視化的過(guò)程中,分別為頂點(diǎn)數(shù)據(jù)和索引數(shù)據(jù)映射相應(yīng)的頂點(diǎn)緩沖區(qū)對(duì)象和索引緩沖區(qū)對(duì)象,可以一次發(fā)送成塊的數(shù)據(jù)到圖形顯卡內(nèi)存中,實(shí)現(xiàn)圖形硬件優(yōu)化的渲染性能,其整體流程如圖3所示。
圖3 三維模型可視化硬件加速實(shí)現(xiàn)的基本流程
基于OpenGL 3D圖形應(yīng)用程序接口和glew擴(kuò)展函數(shù)庫(kù),在VC++6.0編程環(huán)境下對(duì)本文提出的三維建模與可視化方法進(jìn)行了編程實(shí)現(xiàn),圖4是對(duì)某航天器模型(該模型下載于www.nasa.gov,包括8104個(gè)頂點(diǎn),15392個(gè)三角形)進(jìn)行三維可視化的效果。
為檢驗(yàn)算法的可視化效率,在DELL Precision 470計(jì)算機(jī)上進(jìn)行了八組實(shí)驗(yàn),將本文提出的方法和傳統(tǒng)的基于3DS文件的三維模型可視化方法進(jìn)行了對(duì)比。
圖4 航天器模型三維模型可視化效果
1)硬件環(huán)境:%
%CPU:Xeon,主頻2.99 GHz;
內(nèi)存:1.0 GB;顯卡;nVidia Quadro FX 3400;
顯存:256M;
顯示器刷新頻率:72 Hz。
2)實(shí)驗(yàn)結(jié)果
為便于進(jìn)行顯示效率的比較,以圖4所示的航天器模型為基礎(chǔ)模型,同時(shí)復(fù)制多個(gè)模型進(jìn)行顯示,逐漸增大模型整體的復(fù)雜程度,表1是分別采用兩種方法的顯示效率比較。
表1 三維模型可視化效率的比較
從上表可以看出,傳統(tǒng)的基于3DS模型的三維可視化方法,由于模型數(shù)據(jù)組織結(jié)構(gòu)復(fù)雜并且可視化過(guò)程中沒(méi)有得到圖形硬件的優(yōu)化,其顯示效率受模型復(fù)雜程度的影響比較大,隨著模型復(fù)雜程度的增加,其顯示效率迅速下降,當(dāng)模型的復(fù)雜程度達(dá)到20倍于基礎(chǔ)模型時(shí),該方法已不能達(dá)到實(shí)時(shí)渲染的要求。采用本文提出的基于硬件加速的模型可視化方法,由于其模型數(shù)據(jù)的組織方式充分利用了圖形硬件的優(yōu)化特性,因而在可視化過(guò)程可以保持較高的渲染效率,隨著模型復(fù)雜程度的成倍增加其渲染幀率始終保持在72幀/秒左右,受模型復(fù)雜程度的影響極小,適合于復(fù)雜物體的建模和可視化。
[1]3D Studio File Format(3DS).Autodesk Inc.www.autodesk.com.
[2]Richard S.Wright.OpenGL超級(jí)寶典[M].北京人民郵電出版社,2005:376-580.
[3]董朝.基于可編程圖形硬件加速的若干技術(shù)研究[D].杭州:浙江大學(xué),2005.