摘要: VTK是三維重建方面一個(gè)大型的函數(shù)庫,其應(yīng)用日益廣泛。在對數(shù)值模擬軟件進(jìn)行開發(fā)時(shí),需要對曲線、等值線、三維場等結(jié)果數(shù)據(jù)進(jìn)行可視化。在VC環(huán)境下通過VTK類庫的調(diào)用實(shí)現(xiàn)了數(shù)值模擬可視化模塊的開發(fā)。首先對VTK進(jìn)行了源碼編譯和環(huán)境配置。以VTK對曲線數(shù)據(jù)的讀取和可視化為例,介紹了通過C++對VTK庫的調(diào)用方法,并給出了可視化結(jié)果,通過VTK對燈光、色彩及方位等的控制進(jìn)一步增強(qiáng)了結(jié)果的可視化效果。結(jié)果表明,應(yīng)用VTK類庫進(jìn)行數(shù)值模擬結(jié)果可視化模塊的開發(fā)具有效率高、效果好、交互性強(qiáng)的特點(diǎn)。
關(guān)鍵詞: 函數(shù)庫; 結(jié)果數(shù)據(jù)可視化; 數(shù)值模擬軟件開發(fā); VTK
中圖分類號: TN911?34; TP391.41 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2013)06?0015?04
0 引 言
科學(xué)計(jì)算可視化在各個(gè)領(lǐng)域得到越來越廣泛的應(yīng)用,可視化是運(yùn)用計(jì)算機(jī)圖形學(xué)和圖像處理技術(shù)將科學(xué)計(jì)算過程及計(jì)算結(jié)果的數(shù)據(jù)轉(zhuǎn)換為圖形及圖像在屏幕上顯示出來并進(jìn)行交互處理的理論方法和技術(shù)[1]。在眾多的可視化工具中,VTK以其簡便、易用等特點(diǎn)得到越來越多的應(yīng)用。
VTK是在三維函數(shù)庫OpenGL 的基礎(chǔ)上采用面向?qū)ο蟮脑O(shè)計(jì)方法發(fā)展起來的。它將在可視化開發(fā)過程中經(jīng)常遇到的細(xì)節(jié)屏蔽起來,并將一些常用的算法進(jìn)行了封裝。VTK具有強(qiáng)大的三維圖形功能和非常好的流(streaming)和高速緩存(caching)的能力[2],支持基于網(wǎng)絡(luò)的工具和多種著色,支持對多種數(shù)據(jù)類型進(jìn)行處理,代碼具有良好的可移植性。VTK以其優(yōu)良的性能成為數(shù)據(jù)場可視化研究領(lǐng)域的有力工具[3?5]。
在對數(shù)值模擬結(jié)果進(jìn)行可視化時(shí),需要對曲線、等值線、三維場等結(jié)果數(shù)據(jù)進(jìn)行可視化。在VC環(huán)境下通過VTK類庫的調(diào)用實(shí)現(xiàn)了結(jié)果可視化模塊的開發(fā)。
1 VTK的特點(diǎn)及使用方法
1.1 VTK簡介
VTK是美國Kitware公司開發(fā)的一套C++類庫,它吸收了眾多優(yōu)秀的圖像處理和圖形生成算法,可方便地對數(shù)據(jù)集進(jìn)行各種變換和操作,是一個(gè)計(jì)算機(jī)圖形、可視化技術(shù)及圖像處理軟件系統(tǒng)。它包含一個(gè)C++庫以及若干個(gè)中間層的解釋語言(如Tcl/Tk,Java,Python)[6]。VTK一般把數(shù)據(jù)表示成場數(shù)據(jù),它能夠支持和處理包括有規(guī)則的或無規(guī)則的點(diǎn)陣、圖形、體原數(shù)據(jù)等多種表示格式的數(shù)據(jù)。數(shù)據(jù)集是帶有拓?fù)浜蛶缀谓Y(jié)構(gòu)的數(shù)據(jù)對象,除了空間結(jié)構(gòu),數(shù)據(jù)集還附帶有屬性數(shù)據(jù)。屬性數(shù)據(jù)包括:標(biāo)量、矢量、張量、法向、紋理坐標(biāo)以及場數(shù)據(jù)等。
VTK的優(yōu)點(diǎn)是:它是開源、免費(fèi)的,易于生成自己的庫,可以用解釋性語言編寫程序;它是面向?qū)ο蟮模哂胁皇芗s束的庫平臺和大量高級、有用的運(yùn)算法則;軟件系統(tǒng)具有完整性,具有廣闊的用戶群體,并且具有商業(yè)支持。它的缺點(diǎn)有:它不是一個(gè)超高速的圖形引擎,只有C++源代碼,而不具有其他解釋性語言的源代碼;規(guī)模較大,對系統(tǒng)要求較高。
VTK在早期主要用于醫(yī)學(xué)影像的可視化,目前開始應(yīng)用于工業(yè)缺陷檢測、雷達(dá)圖像或電磁場的三維可視化及圖像配準(zhǔn)、圖像分割等領(lǐng)域。VTK作為一種通用的可視化類庫,在科學(xué)和工程界有著越來越廣泛的應(yīng)用。
VTK的使用步驟一般為:讀取或產(chǎn)生數(shù)據(jù),篩選或過濾數(shù)據(jù)、呈現(xiàn)數(shù)據(jù)并與之交互。vtkObject是工具集中大多數(shù)對象的基類,它為跟蹤修改時(shí)間、調(diào)試、打印和事件調(diào)用等提供方法。vtkSource為可視化流程的開始,它為整個(gè)可視化流程定義具體的行為和接口,如讀取、生成數(shù)據(jù)等。vtkFilter利用各種Filter算法將原始數(shù)據(jù)進(jìn)行濾波,以便后續(xù)算法的處理。vtkMapper將經(jīng)過各種filter處理后的應(yīng)用數(shù)據(jù)映射為幾何數(shù)據(jù),即將原始數(shù)據(jù)轉(zhuǎn)換成需要的圖像數(shù)據(jù)。vtkActor類用來表達(dá)繪制場景中的一個(gè)實(shí)體,也就是繪制場景中的演員,幾何數(shù)據(jù)的屬性通過SetMapper()方法將幾何數(shù)據(jù)的屬性告訴演員,vtkActor類為數(shù)據(jù)設(shè)置顏色、材質(zhì)、反射等屬性。然后通過vtkRender類將結(jié)果通過vtkRenderwindow在窗口中顯示出來。最后通過vtkRenderWindowInteractor對演員進(jìn)行交互操作。
1.3 VTK的安裝
VTK的安裝分兩種方式。如果用戶僅僅是希望使用它來打開特定格式的文件(如TCL文件),即程序應(yīng)用的低級用戶而言,只需要簡單地下載VTK的安裝包,單擊Setup.exe進(jìn)行安裝即可。對于類的開發(fā)者而言,即程序應(yīng)用的高級用戶,建議使用源碼編譯的方法,這樣可以通過Debug跟蹤VTK源碼,不僅可以發(fā)現(xiàn)VTK源碼的缺陷從而發(fā)行自己的VTK版本,而且可以更好地理解VTK開發(fā)包的結(jié)構(gòu)層次。
2 應(yīng)用VTK進(jìn)行數(shù)值模擬結(jié)果可視化
(1)vtkSpline:如果用于畫線的點(diǎn)是有順序的,可以考慮使用vtkSpline這個(gè)類。vtkSpline 內(nèi)插了一系列的數(shù)據(jù)點(diǎn),每一個(gè)一維參數(shù)坐標(biāo)t都對應(yīng)一個(gè)惟一的值x。
(2)vtkCardinalSpline:通常樣條線被用來由添加一系列參變的坐標(biāo)值如data(t,x)通過賦值函數(shù)如vtkCardinalSpline::Evaluate()實(shí)現(xiàn)的。樣條線可以被設(shè)置為封閉或打開。封閉的樣條線通過連續(xù)函數(shù)和插值使得最后一個(gè)點(diǎn)到第一個(gè)點(diǎn)是連續(xù)的,只需設(shè)置ClosedOn屬性即可實(shí)現(xiàn)而無需再復(fù)制第一個(gè)點(diǎn)。
(3)vtkLine:兩點(diǎn)成線,vtkLine是vtkCell的一個(gè)具體實(shí)現(xiàn),用來表示一條一維線。
(4)vtkPolyLine:vtkPolyLine是vtkCell的一個(gè)具體實(shí)現(xiàn),用來表示一系列的一維線。
(6)vtkParametricSpline:vtkParametricSpline是一個(gè)用于一維插值樣條線的參變函數(shù)。它將一個(gè)參數(shù)u通過三條插值樣條線映射到一個(gè)三維點(diǎn)(x,y,z)上。這一族的一維線在[0,1]之間被參數(shù)化。
3 結(jié) 語
應(yīng)用可視化工具VTK實(shí)現(xiàn)了數(shù)值模擬結(jié)果的可視化,重點(diǎn)介紹了VTK的曲線繪制,給出了多種曲線繪制的方法。與使用 OpenGL 相比,使用VTK效率更高,開發(fā)出的軟件更加標(biāo)準(zhǔn)和規(guī)范[9?10]。VTK作為科學(xué)計(jì)算可視化的一個(gè)重要工具,功能強(qiáng)大,使用靈活,在數(shù)值模擬可視化領(lǐng)域有著廣泛的應(yīng)用前景。
參考文獻(xiàn)
[1] 肖何,何明耘,白忠建,等.基于VTK的電磁場三維可視化研究及實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2007,27(11):2773?2775.
[2] 侯煥,韓雷,林忠宇.VTK技術(shù)在雷達(dá)圖像可視化中的研究與應(yīng)用[J].現(xiàn)代電子技術(shù),2010,33(6):122?124.
[3] 歐耿鑫,陳喜,佘超,等.基于VTK的地下水?dāng)?shù)字模擬三維可視化開發(fā)應(yīng)用[J].水文,2009,29(1):17?20.
[4] 周維,李敬輝,黃高.基于VTK的海戰(zhàn)場電磁信息可視化技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2012,40(1):121?124.
[5] 王曉宇,王平江,陳吉紅.基于VTK的紅外熱圖等溫線提取[J].計(jì)算機(jī)應(yīng)用與軟件,2008,25(10):14?15.
[6] 劉偉寧.基于VTK的海底聲納數(shù)據(jù)實(shí)時(shí)三維建模軟件設(shè)計(jì)[D].杭州:浙江大學(xué),2010.
[7] 黃姍姍,王博亮,閔小平.基于VTK的可視化技術(shù)的研究與應(yīng)用[J].中國數(shù)字醫(yī)學(xué),2008(1):31?34.
[8] 王敏.VTK可視化類庫及其應(yīng)用進(jìn)展[J].中國科技信息,2010(20):114?115.
[9] 洪濤,潘志方,林立本,等.VTK醫(yī)學(xué)圖像三維重建應(yīng)用及實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(4):127?130.
[10] 葛成.三維矢量場可視化方法研究[D].南京:南京師范大學(xué),2011.