採用的入門教材:《醫學圖像編程技術》電子工業出版社 周振環 伍雲智 趙明 編著。html
上面這個教材聽有人講只是翻譯了一下VTK的手冊。可是我以爲仍是值得看一看吧。c++
個人實驗環境:VS2010 Win7 64位系統 編程
安裝時參照 http://blog.csdn.net/cgcoder/article/details/8262232 app
來安裝的。學習
所以跳過《醫學圖像編程技術》第一章:安裝VTK和ITKspa
《醫學圖像編程技術》第二章是範例主要是講解幾個範例。我以爲能夠在這一章節中多理解一下VTK的可視化管線。.net
我打算採用例子和補充材料的方式來學習這一章節。不過要準備回家了。明年再看啦!一共有15個範例。計劃用5天的時間看完這一章。
翻譯
2015年1月4日code
過節回來啦!htm
下面從2.1入門範例-渲染一個圓錐開始
首先新建一個c++ 控制檯應用項目空項目,項目名:ConeTest
在項目中添加cpp文件,ConeTest.cpp
打開項目屬性
①在c/c++ 常規 ->附加庫目錄中添加以下:
②在項目屬性->連接器->輸入->附加依賴項中添加:
而後添加程序代碼:
一、程序代碼
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
int main()
{
//建立數據源:建立一個圓錐,並設置其參數:高度、底面半徑和分辨率
vtkConeSource *cone=vtkConeSource::New();
cone->SetHeight(3.0);
cone->SetRadius(1.0);
cone->SetResolution(10);
//映射器:建立一個多邊形映射器,用於把多邊形數據映射爲能夠被計算機渲染的圖元
vtkPolyDataMapper *coneMapper=vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());
//演員:建立一個演員,並關聯一個映射器,從而肯定演員的形狀
vtkActor *coneActor= vtkActor::New();
coneActor->SetMapper(coneMapper);
//渲染器:建立一個渲染器,添加要渲染的演員
vtkRenderer *ren1=vtkRenderer::New();
ren1->AddActor(coneActor);
ren1->SetBackground(0.1,0.2,0.4);
//渲染窗口:添加一個渲染窗口,供渲染器使用
vtkRenderWindow *renWin=vtkRenderWindow::New();
renWin->AddRenderer(ren1);
renWin->SetSize(300,300);
//渲染360次,這裏的主要做用是延時
int i;
for(i=10;i<360;++i)renWin->Render();
//清除對象
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return 0;
}
二、代碼解釋
頭文件包含:這些頭文件定義類在代碼中要使用的VTK類,頭文件名和代碼中要用到的VTK類名相同。
①代碼中首先建立了一個vtkConeSource類的實例,該對象表示一個圓錐體(其實是一個正棱錐,可是當棱數足夠多時,能夠近似看作圓錐),接着設置了三個屬性,分別是高度、半徑和分辨率(分辨率是指側面的個數,或者說是側棱數)。
②vtkPolyDataMapper做用是把多邊形數據映射爲圖元
像上面兩個對象那樣,將一個對象的輸出當作另外一個對象的輸入的用法在VTK程序中是常常見到的,通常能夠將多個對象串聯在一塊兒造成一條鏈,稱之爲可視化流水線。本例中流水線的源頭是cone,盡頭是coneMapper。
③ 而後建立一個vtkActor類的實例,並經過SetMapper方法將其與映射器關聯在一塊兒。vtkActor類表示場景中的一個實體,該實體的幾何形狀由關聯的映射器對象肯定,該實體的屬性由相關聯的屬性對象肯定。這枚沒有用方法SetProperty()來顯式關聯一個屬性對象,代表接受的是默認的屬性對象。
④建立一個vtkRenderer類的實例ren1。vtkRenderer類表示一個渲染器,用於控制對象的渲染過程。用方法AddActor()添加須要被渲染的對象,用方法SetBackground()設置背景色。
⑤最後建立vtkRenderWindow類的實例renWin,該對象表示的是渲染用的窗口,供渲染者渲染用。用方法AddRenderer(0增長一個渲染着,用方法SeSize()設置窗口的大小。該對象有個方法Render(),用於執行對圖像的渲染。
接下來是一個for循環,主要做用是用來延時。最後刪除全部建立的對象並退出。
程序的結構以下圖:
圖2-2 渲染一個圓錐範例中各對象的關係
紅色箭頭表示的是流水線中數據的流向,黃色箭頭表示的是對象間的關係。箭頭邊標有該關係的說明,能夠這樣理解:箭頭起點的對象的說明文字是箭頭重點對象,如」vtkRenderer「的」渲染窗口「是」vtkrenderWindow「.
在本例中,建立對象調用的是New(),清楚對象調用的是Delete();在VTK中,推薦使用這兩個方法來保證設備的獨立性及引用技術的妥善管理。在這裏,Delete()方法的調用不是必需的,由於當程序終止運行後,獨享會被自動刪除。但通常來說,對每一個New方法老是須要調用一個相應的Delete()方法的。
第一個例子的筆記如上。對其中牽扯到的一些知識點,蒐集資料和理解:
http://www.cnblogs.com/burellow/p/3641757.html
vtk工做流,有不少地方將vtk中的工做流比做演員角色劇本之類的,雖然在從未用過vtk的人看來很形象,可是我以爲對我來說,很容易限制住對之後程序的理解,畢竟這不是從編程角度,而是從實際世界的角度去理解的。所以在後面的編程中,我有時候會不自覺的去用現實世界的場景去對應,這樣很差,既影響了對程序的理解,並且限制了編程時的思路。固然多是由於我現階段學的還太少。
其實,我以爲這本書應該把第三章 數據集與數據屬性 放在前面來說,這樣雖然上手稍微慢一點,可是容易對vtk有一個從編程方面從基礎開始的理解。以上是個人觀點。
http://lzchenheng.blog.163.com/blog/static/838335362010718102554655/
VTK可視化管線:VTK可視化流水線主要將數據對象和過程對象組成,這兩種對象相互之間能夠用多種方式鏈接在一塊兒,構成可視化管線的拓撲結構,在構建可視化管線拓撲結構時,必需要保證管線上遊的對象輸出的數據類型和其下游對象接收的數據類型保持一致,如一個源對象輸出的是一個多邊形數據類型,而和其鏈接的過濾器對象只能接收格網類型的數據,那麼可視化管線就不能正確的執行,因此,在構建可視化管線時,必定要注意對象輸入、輸出之間數據類的匹配性。