看完了網(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++的類庫,外圍有Tcl唇跨、Java稠通、Python的語言解釋層。這樣做的目的是核心高效买猖,外圍易于開發(fā)和擴(kuò)展改橘。當(dāng)然也可以完全用C++開發(fā)。
-
兩個(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 代表了我們在場景中看到的物體飞主。
- 3D: vtkProp3D -- vtkActor + vtkVolume
- 2D: vtkActor2D
Props并不直接代表圖形數(shù)據(jù),實(shí)際上他們是依賴于Mapper奸远,Mapper才是圖形數(shù)據(jù)的代表既棺。
Props也依賴于property object, 屬性對象的控制著Props的外觀。
Actor 和 Volume有內(nèi)在的transformation object(vtkTransform)懒叛。這個(gè)類封裝了一個(gè)4*4的變換矩陣(transformation matrix)丸冕,控制Prop的postion, orientation和 scale。
光照(vtkLight)控制著場景的光照效果薛窥,只有在3D中有效胖烛。
攝像機(jī)(vtkCamera)控制著3D的Prop怎樣在平面上顯示眼姐,也只在3D中有效。
vtkMapper是連接visulization popeline 和 graphics pipeline的“介質(zhì)”佩番。
-
vtkRenderer众旗、vtkRenderWindow上一章已經(jīng)介紹過,這些是最終顯示在屏幕上的內(nèi)容趟畏。
vtkRenderWindowInteractor是用戶和顯示界面交互的工具贡歧,用戶可以用鼠標(biāo)、鍵盤控制顯示赋秀。
上述的object都有subclasses來細(xì)致描述object的行為利朵。
Visualization Model
-
VTK使用數(shù)據(jù)流的方式來將數(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有如下幾種:
-
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來產(chǎn)生新的data object著洼,完成了系統(tǒng)中的算法處理樟遣。
- Visulization pipeline的構(gòu)建涉及到以下幾個(gè)要點(diǎn):
- pipeline是由類似于以下的語句構(gòu)成:
aFilter -> SetInput( anotherFilter -> GetOutput() );
- pipeline是由類似于以下的語句構(gòu)成:
VTK中的方法名字是大駝峰命名,即第一個(gè)單詞的首字母是大寫的……
- VTK使用了“懶惰”的計(jì)算流程身笤,即只有當(dāng)數(shù)據(jù)被需要時(shí)才計(jì)算豹悬,如果數(shù)據(jù)沒有更新則不重復(fù)計(jì)算。
- process object 和 data object 的拼接都需要compatible液荸,這個(gè)依靠編程語言的type check輔助屿衅。
- 由于VTK處理的dataset通常十分巨大,我們必須選擇是否緩存(cache)或者保留(retain)pipeline執(zhí)行過程中產(chǎn)生的數(shù)據(jù)莹弊。
其他一些小注意點(diǎn)
- Graphics pipeline中也有process,不過針對的是image data涡尘。即針對圖形化數(shù)據(jù)的處理忍弛,而不是原始的數(shù)字信息。
- Graphics pipeline中的process幾乎都是多線程的考抄,并且可以自動把數(shù)據(jù)切割成片來處理细疚,以確保內(nèi)存足夠使用。
- 每個(gè)VTK的類(subclass of vtkObject)都有一個(gè)
AddObserver()
的方法來設(shè)置回調(diào)(callback)川梅。 - VTK的程序編譯流程一般是cmake -> make疯兼。cmake是用來產(chǎn)生Makefile的,里面包含了VTK的include path, link lines 和 dependence贫途。cmake依賴的是名為CMakeList.txt的文件吧彪。