1.下載VTK
2.安裝CMake
3.運行CMake對VTK進行配置

配置源代碼路徑和目標路徑,在CMake界面上的“Where is the source code”文本框里輸入前一步解壓VTK-7.1.1.zip之后的路徑,即D:\Toolkits\VTK\VTK-7.1.1。也就是這個文本框應該輸入VTK源碼目錄里最外層的CMakeLists.txt文件所在的路徑。接着,在“Where to build the binaries”文本框里輸入前一步新建的空文件夾的路徑,即D:\Toolkits\VTK\VTK-7.1.1-bin,這個文本框所輸的路徑可以跟“Where is the source code”的一樣,分開兩個不同的路徑的好處是后續編譯過程生成的文件不會跟VTK的源碼混合在一起,避免對源碼目錄的“污染”,這也是后續內容介紹的CMake的“in-place”和“out-of-place”的區別。

以上兩個文本框輸入完之后,按“Configure”按鈕,會彈出如下圖所示的對話框,在Specify the generator for this project處選擇Visual Studio 12 2013 Win64:
點Finish,回CMake的主界面,CMake即開始根據具體的平台環境配置VTK工程,配置時間會因硬件配置的不同而不同,一般需要幾分鍾時間。
配置完成后,CMake界面如下圖所示:
Configure完成后會出來紅色的掃描結果,根據自己需要對其中的選項進行勾選。
關於VTK的一些CMake配置選項的說明:
BUILD_EXAMPLES —默認是關閉的,如果打開這個選項,則會編譯VTK例子,同時VTK編譯所需的時間也較長,占用的磁盤空間也較大。對於初學者來說,建議把這個選項打開。
BUILD_SHARED_LIBS —默認是關閉的,意味着VTK是靜態編譯;如果打開這個選項,則是動態編譯。
“靜態編譯”與“動態編譯”的區別:靜態編譯就是在編譯的時候把所有的模塊都編譯進可執行文件(exe)里去,當啟動這個可執行文件時所有的模塊都已加載進來。動態編譯則是編譯的時候需要的模塊都沒有編譯進去,一般情況下可以把這些模塊都編譯成動態鏈接庫DLL,啟動程序(初始化)的時候這些模塊不會被加載,運行的時候用到那個模塊就調用哪個DLL文件。靜態鏈接庫編譯相當於你帶着一個工具包到處跑,遇到有需要的地方不需要周圍的環境提供相應的工具,自己用自己工具包的工具就行了,所以當環境發生變化可以盡可能的無視;動態鏈接庫編譯相當於不帶任何東西,走到哪是哪。這兩者的區別顯然就是前者重量增加了,即程序的體積會比后者的大。
所以,究竟是用“靜態編譯”還是“動態編譯”,關鍵看自己的需要。對於VTK初學者而言,所涉及到的工程可能都比較小,建議用“靜態編譯”,也方便把VTK程序移植到其他沒有安裝VTK的計算機上運行。本書的VTK類庫是采用靜態編譯。
BUILD_TESTING —默認是打開的,表示會編譯VTK的測試程序。VTK里每個類都有對應的程序文件對該類進行測試,對於初學者而言,可以關閉掉這個選項,后續如有需要,可以再打開此選項。
VTK_DATA_ROOT —指向VTKData所在的路徑,即第1章里下載的文件vtkdata-5.10.0.zip解壓后的路徑。一般情況下,VTK能夠自動搜索到,如果沒有搜索到可以手動輸入,在運行VTK的例子時需要用到這些數據。
CMAKE_INSTALL_PREFIX —這個選項表示VTK的安裝路徑,默認的路徑是:C:/Program Files/VTK。該選項的值可不作更改,按默認值即可。
VTK_USE_QT —是否使用Qt。在這個系列里,我們使用Qt作為GUI開發工具,所以勾上該選項。
VTK_WRAP_JAVA、VTK_WRAP_PYTHON、VTK_WRAP_TCL —這三個選項是供准備使用Java、Python或者Tcl語言開發VTK工程的用戶選擇的。VTK由兩個子系統組成,分別是C++類庫和提供給Java、Tcl和Python來操作該類庫的解釋器工具,如果勾上以上三個選項,即會編譯這些解釋器工具。
勾選圖2.3的“Advance”復選框,可以在CMake界面上看到更多的選項,各選項分別表示什么意思,可以把鼠標在該選項名字停留片刻,即會彈出關於該選項的提示信息。另外“Advance”視圖下以下幾個選項需要說明一下:
BUILD_DOCUMENTATION —默認是關閉的,如果打開這個選項,則會編譯VTK幫助文檔,由於這個文檔VTK已提供下載,所以可以不選。
VTK_USE_GUISUPPORT — VTK是否支持GUI,Windows下如果需要使用MFC開發的,需要勾選上這個選項。本教程在演示的時候也會把這個選項勾選,如果你確定不使用MFC,可以不用選擇該選項。
定制每個選項的值以后,按“Configure”按鈕,繼續配置,CMake界面如圖2.4所示。




3.生成VTK
4.錯誤解決
4.1 vtkWrappingPythonCore項目無法打開文件“python27.lib”
4.2 vtkImagingMorphological項目無法打開文件“..\..\lib\Debug\vtkCommonDataModelPython27D-7.1.lib”
5.運行Examples
5.1 CMake編譯
5.2 新建項目編譯
- kernel32.lib
- user32.lib
- gdi32.lib
- winspool.lib
- shell32.lib
- ole32.lib
- oleaut32.lib
- uuid.lib
- comdlg32.lib
- advapi32.lib
- comctl32.lib
- vfw32.lib
- ws2_32.lib
- wsock32.lib
- opengl32.lib
- vtkalglib-7.1.lib
- vtkChartsCore-7.1.lib
- vtkCommonColor-7.1.lib
- vtkCommonComputationalGeometry-7.1.lib
- vtkCommonCore-7.1.lib
- vtkCommonDataModel-7.1.lib
- vtkCommonExecutionModel-7.1.lib
- vtkCommonMath-7.1.lib
- vtkCommonMisc-7.1.lib
- vtkCommonSystem-7.1.lib
- vtkCommonTransforms-7.1.lib
- vtkDICOMParser-7.1.lib
- vtkDomainsChemistry-7.1.lib
- vtkDomainsChemistryOpenGL2-7.1.lib
- vtkexoIIc-7.1.lib
- vtkexpat-7.1.lib
- vtkFiltersAMR-7.1.lib
- vtkFiltersCore-7.1.lib
- vtkFiltersExtraction-7.1.lib
- vtkFiltersFlowPaths-7.1.lib
- vtkFiltersGeneral-7.1.lib
- vtkFiltersGeneric-7.1.lib
- vtkFiltersGeometry-7.1.lib
- vtkFiltersHybrid-7.1.lib
- vtkFiltersHyperTree-7.1.lib
- vtkFiltersImaging-7.1.lib
- vtkFiltersModeling-7.1.lib
- vtkFiltersParallel-7.1.lib
- vtkFiltersParallelImaging-7.1.lib
- vtkFiltersPoints-7.1.lib
- vtkFiltersProgrammable-7.1.lib
- vtkFiltersSelection-7.1.lib
- vtkFiltersSMP-7.1.lib
- vtkFiltersSources-7.1.lib
- vtkFiltersStatistics-7.1.lib
- vtkFiltersTexture-7.1.lib
- vtkFiltersVerdict-7.1.lib
- vtkfreetype-7.1.lib
- vtkGeovisCore-7.1.lib
- vtkgl2ps-7.1.lib
- vtkglew-7.1.lib
- vtkGUISupportQt-7.1.lib
- vtkGUISupportQtSQL-7.1.lib
- vtkhdf5_hl-7.1.lib
- vtkhdf5-7.1.lib
- vtkImagingColor-7.1.lib
- vtkImagingCore-7.1.lib
- vtkImagingFourier-7.1.lib
- vtkImagingGeneral-7.1.lib
- vtkImagingHybrid-7.1.lib
- vtkImagingMath-7.1.lib
- vtkImagingMorphological-7.1.lib
- vtkImagingSources-7.1.lib
- vtkImagingStatistics-7.1.lib
- vtkImagingStencil-7.1.lib
- vtkInfovisCore-7.1.lib
- vtkInfovisLayout-7.1.lib
- vtkInteractionImage-7.1.lib
- vtkInteractionStyle-7.1.lib
- vtkInteractionWidgets-7.1.lib
- vtkIOAMR-7.1.lib
- vtkIOCore-7.1.lib
- vtkIOEnSight-7.1.lib
- vtkIOExodus-7.1.lib
- vtkIOExport-7.1.lib
- vtkIOGeometry-7.1.lib
- vtkIOImage-7.1.lib
- vtkIOImport-7.1.lib
- vtkIOInfovis-7.1.lib
- vtkIOLegacy-7.1.lib
- vtkIOLSDyna-7.1.lib
- vtkIOMINC-7.1.lib
- vtkIOMovie-7.1.lib
- vtkIONetCDF-7.1.lib
- vtkIOParallel-7.1.lib
- vtkIOParallelXML-7.1.lib
- vtkIOPLY-7.1.lib
- vtkIOSQL-7.1.lib
- vtkIOTecplotTable-7.1.lib
- vtkIOVideo-7.1.lib
- vtkIOXML-7.1.lib
- vtkIOXMLParser-7.1.lib
- vtkjpeg-7.1.lib
- vtkjsoncpp-7.1.lib
- vtklibxml2-7.1.lib
- vtkLocalExample-7.1.lib
- vtkmetaio-7.1.lib
- vtkNetCDF_cxx-7.1.lib
- vtkNetCDF-7.1.lib
- vtkoggtheora-7.1.lib
- vtkParallelCore-7.1.lib
- vtkpng-7.1.lib
- vtkproj4-7.1_d.lib
- vtkRenderingAnnotation-7.1.lib
- vtkRenderingContext2D-7.1.lib
- vtkRenderingContextOpenGL2-7.1.lib
- vtkRenderingCore-7.1.lib
- vtkRenderingFreeType-7.1.lib
- vtkRenderingGL2PSOpenGL2-7.1.lib
- vtkRenderingImage-7.1.lib
- vtkRenderingLabel-7.1.lib
- vtkRenderingLOD-7.1.lib
- vtkRenderingOpenGL2-7.1.lib
- vtkRenderingQt-7.1.lib
- vtkRenderingVolume-7.1.lib
- vtkRenderingVolumeOpenGL2-7.1.lib
- vtksqlite-7.1.lib
- vtksys-7.1.lib
- vtkTestingGenericBridge-7.1.lib
- vtkTestingIOSQL-7.1.lib
- vtkTestingRendering-7.1.lib
- vtktiff-7.1.lib
- vtkverdict-7.1.lib
- vtkViewsContext2D-7.1.lib
- vtkViewsCore-7.1.lib
- vtkViewsInfovis-7.1.lib
- vtkViewsQt-7.1.lib
- vtkzlib-7.1.lib
kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib comctl32.lib vfw32.lib ws2_32.lib wsock32.lib opengl32.lib vtkalglib-7.1.lib vtkChartsCore-7.1.lib vtkCommonColor-7.1.lib vtkCommonComputationalGeometry-7.1.lib vtkCommonCore-7.1.lib vtkCommonDataModel-7.1.lib vtkCommonExecutionModel-7.1.lib vtkCommonMath-7.1.lib vtkCommonMisc-7.1.lib vtkCommonSystem-7.1.lib vtkCommonTransforms-7.1.lib vtkDICOMParser-7.1.lib vtkDomainsChemistry-7.1.lib vtkDomainsChemistryOpenGL2-7.1.lib vtkexoIIc-7.1.lib vtkexpat-7.1.lib vtkFiltersAMR-7.1.lib vtkFiltersCore-7.1.lib vtkFiltersExtraction-7.1.lib vtkFiltersFlowPaths-7.1.lib vtkFiltersGeneral-7.1.lib vtkFiltersGeneric-7.1.lib vtkFiltersGeometry-7.1.lib vtkFiltersHybrid-7.1.lib vtkFiltersHyperTree-7.1.lib vtkFiltersImaging-7.1.lib vtkFiltersModeling-7.1.lib vtkFiltersParallel-7.1.lib vtkFiltersParallelImaging-7.1.lib vtkFiltersPoints-7.1.lib vtkFiltersProgrammable-7.1.lib vtkFiltersSelection-7.1.lib vtkFiltersSMP-7.1.lib vtkFiltersSources-7.1.lib vtkFiltersStatistics-7.1.lib vtkFiltersTexture-7.1.lib vtkFiltersVerdict-7.1.lib vtkfreetype-7.1.lib vtkGeovisCore-7.1.lib vtkgl2ps-7.1.lib vtkglew-7.1.lib vtkGUISupportQt-7.1.lib vtkGUISupportQtSQL-7.1.lib vtkhdf5_hl-7.1.lib vtkhdf5-7.1.lib vtkImagingColor-7.1.lib vtkImagingCore-7.1.lib vtkImagingFourier-7.1.lib vtkImagingGeneral-7.1.lib vtkImagingHybrid-7.1.lib vtkImagingMath-7.1.lib vtkImagingMorphological-7.1.lib vtkImagingSources-7.1.lib vtkImagingStatistics-7.1.lib vtkImagingStencil-7.1.lib vtkInfovisCore-7.1.lib vtkInfovisLayout-7.1.lib vtkInteractionImage-7.1.lib vtkInteractionStyle-7.1.lib vtkInteractionWidgets-7.1.lib vtkIOAMR-7.1.lib vtkIOCore-7.1.lib vtkIOEnSight-7.1.lib vtkIOExodus-7.1.lib vtkIOExport-7.1.lib vtkIOGeometry-7.1.lib vtkIOImage-7.1.lib vtkIOImport-7.1.lib vtkIOInfovis-7.1.lib vtkIOLegacy-7.1.lib vtkIOLSDyna-7.1.lib vtkIOMINC-7.1.lib vtkIOMovie-7.1.lib vtkIONetCDF-7.1.lib vtkIOParallel-7.1.lib vtkIOParallelXML-7.1.lib vtkIOPLY-7.1.lib vtkIOSQL-7.1.lib vtkIOTecplotTable-7.1.lib vtkIOVideo-7.1.lib vtkIOXML-7.1.lib vtkIOXMLParser-7.1.lib vtkjpeg-7.1.lib vtkjsoncpp-7.1.lib vtklibxml2-7.1.lib vtkLocalExample-7.1.lib vtkmetaio-7.1.lib vtkNetCDF_cxx-7.1.lib vtkNetCDF-7.1.lib vtkoggtheora-7.1.lib vtkParallelCore-7.1.lib vtkpng-7.1.lib vtkproj4-7.1_d.lib vtkRenderingAnnotation-7.1.lib vtkRenderingContext2D-7.1.lib vtkRenderingContextOpenGL2-7.1.lib vtkRenderingCore-7.1.lib vtkRenderingFreeType-7.1.lib vtkRenderingGL2PSOpenGL2-7.1.lib vtkRenderingImage-7.1.lib vtkRenderingLabel-7.1.lib vtkRenderingLOD-7.1.lib vtkRenderingOpenGL2-7.1.lib vtkRenderingQt-7.1.lib vtkRenderingVolume-7.1.lib vtkRenderingVolumeOpenGL2-7.1.lib vtksqlite-7.1.lib vtksys-7.1.lib vtkTestingGenericBridge-7.1.lib vtkTestingIOSQL-7.1.lib vtkTestingRendering-7.1.lib vtktiff-7.1.lib vtkverdict-7.1.lib vtkViewsContext2D-7.1.lib vtkViewsCore-7.1.lib vtkViewsInfovis-7.1.lib vtkViewsQt-7.1.lib vtkzlib-7.1.lib需要注意的是,本次配置並未將.dll文件復制到C:\Windows\System32或者C:\Windows\SysWOW64下,如果是WIN7則需要復制,本機系統是WIN10,只在Path中添加了VTK的.dll文件所在目錄。
- #include <vtkAutoInit.h>
- VTK_MODULE_INIT(vtkRenderingOpenGL2);
- VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle);該方法適用於VTK7.0及以上版本,其他版本可參考下列資料: