看完了網(wǎng)上幾篇入門的介紹,我開始閱讀官方提供的標(biāo)準(zhǔn)教程。
VTK這個(gè)組織很有意思,軟件是開源的,社區(qū)也有,但是教程居然是要錢的……在vtk官網(wǎng)上有賣兩本書,一本是<VTK Textbook>,主要是介紹VTK的設(shè)計(jì)思想,VTK這個(gè)工具本身就是這本書的附帶產(chǎn)物;另一本是<VTK User's Guide>,看名稱就知道是介紹如何使用,所以我決定從這本書入手。
這篇文章記錄了我在閱讀這本書前三章時(shí)候的重點(diǎn)內(nèi)容。
Chapter 1 Welcome & 2 Installation
- VTK的使用要點(diǎn)在于熟悉VTK提供的一系列的object,和這些object的組合方式。
- 書上提供的內(nèi)容只覆蓋了一部分的類,完整的reference可以在官網(wǎng)找到,是Doxygen生成的Manual。
Chapter 3 System Overview
-
VTK系統(tǒng)是由兩個(gè)子系統(tǒng)組成的,核心是C++的類庫(kù),外圍有Tcl、Java、Python的語(yǔ)言解釋層。這樣做的目的是核心高效,外圍易于開發(fā)和擴(kuò)展。當(dāng)然也可以完全用C++開發(fā)。
VTK系統(tǒng)構(gòu)架 -
兩個(gè)object model構(gòu)成了VTK,這兩個(gè)部分我在上一篇文章中也做了介紹
- The Graphics Model -- 由圖形數(shù)據(jù)到圖像顯示 Geometry -> Image
- The Visualization Model -- 由數(shù)字?jǐn)?shù)據(jù)到圖形數(shù)據(jù) Data -> Geometry
Graphics Model
- VTK的Graphics Model主要由以下一些object組成:
- vtkActor, vtkActor2D, vtkVolume
- vtkLight
- vtkCamera
- vtkProperty, vtkProperty2D
- vtkMapper, vtkMapper2D
- vtkTransform
- vtkLookupTable, vtkColorTransferFunction
- vtkRenderer
- vtkRenderWindow
- vtkRenderWindowInteractor
-
Props 代表了我們?cè)趫?chǎng)景中看到的物體。
- 3D: vtkProp3D -- vtkActor + vtkVolume
- 2D: vtkActor2D
Props并不直接代表圖形數(shù)據(jù),實(shí)際上他們是依賴于Mapper,Mapper才是圖形數(shù)據(jù)的代表。
Props也依賴于property object, 屬性對(duì)象的控制著Props的外觀。
Actor 和 Volume有內(nèi)在的transformation object(vtkTransform)。這個(gè)類封裝了一個(gè)4*4的變換矩陣(transformation matrix),控制Prop的postion, orientation和 scale。
光照(vtkLight)控制著場(chǎng)景的光照效果,只有在3D中有效。
攝像機(jī)(vtkCamera)控制著3D的Prop怎樣在平面上顯示,也只在3D中有效。
vtkMapper是連接visulization popeline 和 graphics pipeline的“介質(zhì)”。
-
vtkRenderer、vtkRenderWindow上一章已經(jīng)介紹過(guò),這些是最終顯示在屏幕上的內(nèi)容。
Geometry --> Image vtkRenderWindowInteractor是用戶和顯示界面交互的工具,用戶可以用鼠標(biāo)、鍵盤控制顯示。
上述的object都有subclasses來(lái)細(xì)致描述object的行為。
Visualization Model
-
VTK使用數(shù)據(jù)流的方式來(lái)將數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換成圖形數(shù)據(jù)。這其中涉及到兩個(gè)基本的類:
- vtkDataObject - a generic "bolb" of data
- vtkProcessObject
-
擁有統(tǒng)一結(jié)構(gòu)的數(shù)據(jù)被稱為dataset(vtkDataSet),VTK支持的dataset有如下幾種:
dataset supported by VTK -
Data Object 由兩部分構(gòu)成:
- geometric and topological structure(points and cells) as illustrated by the figure 即圖形的幾何構(gòu)成
- attribute data associated with the points and cells 即“點(diǎn)”和“點(diǎn)之間的連接”的屬性數(shù)據(jù)

- Process Object,也被稱為"filter",操作data object來(lái)產(chǎn)生新的data object,完成了系統(tǒng)中的算法處理。

- Visulization pipeline的構(gòu)建涉及到以下幾個(gè)要點(diǎn):
- pipeline是由類似于以下的語(yǔ)句構(gòu)成:
aFilter -> SetInput( anotherFilter -> GetOutput() );
- pipeline是由類似于以下的語(yǔ)句構(gòu)成:
VTK中的方法名字是大駝峰命名,即第一個(gè)單詞的首字母是大寫的……
- VTK使用了“懶惰”的計(jì)算流程,即只有當(dāng)數(shù)據(jù)被需要時(shí)才計(jì)算,如果數(shù)據(jù)沒(méi)有更新則不重復(fù)計(jì)算。
- process object 和 data object 的拼接都需要compatible,這個(gè)依靠編程語(yǔ)言的type check輔助。
- 由于VTK處理的dataset通常十分巨大,我們必須選擇是否緩存(cache)或者保留(retain)pipeline執(zhí)行過(guò)程中產(chǎn)生的數(shù)據(jù)。

其他一些小注意點(diǎn)
- Graphics pipeline中也有process,不過(guò)針對(duì)的是image data。即針對(duì)圖形化數(shù)據(jù)的處理,而不是原始的數(shù)字信息。
- Graphics pipeline中的process幾乎都是多線程的,并且可以自動(dòng)把數(shù)據(jù)切割成片來(lái)處理,以確保內(nèi)存足夠使用。
- 每個(gè)VTK的類(subclass of vtkObject)都有一個(gè)
AddObserver()的方法來(lái)設(shè)置回調(diào)(callback)。 - VTK的程序編譯流程一般是cmake -> make。cmake是用來(lái)產(chǎn)生Makefile的,里面包含了VTK的include path, link lines 和 dependence。cmake依賴的是名為CMakeList.txt的文件。


