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