本文介绍的是Win10的VTK安装,利用cmake编译VTK,并在Visual Studio2019上的空项目使用安装好的VTK,在VS和机器上配置VTK的相关的环境。
1)文件需求
点击超链接即可跳转到下载页面
- Visual Studio Community 2019
注意需要在安装的时候勾选使用C++的桌面开发
如果安装时忘记选择,可以后期在Visual Studio Installer中选择修改即可看到相关信息
- cmake-3.15.3-win64-x64.msi
安装时正常一路next即可。 - VTK-8.2.0
- VTK Data
下载完成后,新建文件夹。文件结构如下,我的目录是 D:\SoftWare\VTK
将下载的VTK源码(VTK-8.2.0.zip)解压到VTK │ └───Data │ └───Files │ └───VTK-8.2.0 │ └───Install
VTK-8.2.0
文件夹下,将Data.tgz解压到Data
文件夹下。
2)安装VTK
- 打开cmake,选择源码和源码被编译到的路径(此路径可以自己定义,在此我的是VTK下的Files)。
- 点击
Configure
,注意2处选择你相应的VS版本,之后点击3处finish
。
- 经过漫长的等待之后,会出现一些红色的参数,这里只修改两项,勾选BUILD_EXAMPLES,把CMAKE_INSTALL_PREFIX改为我们的
Install
文件夹,之后再点击Configure
。
- 无红色参数之后点击
Generate
,完成后点击旁边的Open Project
- 进入VS之后,右击
ALL_BUILD
,选择生成
,同样右击INSTALL
,选择生成
3)运行demo
- 右击
Cube
,选择成为启动项目
- 点击本地Windows调试器,注意选择x64,即可看到demo!
4)新建项目配置VTK
- VS创建一个新项目,选择空项目,我们命名为
helloVtk
。
- 源文件中添加新建项
helloVtk.cxx
- 设置
helloVtk
项目属性:右击helloVtk
,选择属性。
- 设置包含目录:为我们之前创建的
Install
文件夹中的include\vtk-8.2
,在这里我的输入为D:\SoftWare\VTK\Install\include\vtk-8.2
- 设置库目录为
Install
下的lib
文件夹,在这里我的输入为D:\SoftWare\VTK\Install\lib
- 配置链接器
输入
附加依赖项,应该为
Install\lib
下的所有.lib文件。
我的输入如下vtkChartsCore-8.2.lib vtkCommonColor-8.2.lib vtkCommonComputationalGeometry-8.2.lib vtkCommonCore-8.2.lib vtkCommonDataModel-8.2.lib vtkCommonExecutionModel-8.2.lib vtkCommonMath-8.2.lib vtkCommonMisc-8.2.lib vtkCommonSystem-8.2.lib vtkCommonTransforms-8.2.lib vtkDICOMParser-8.2.lib vtkDomainsChemistry-8.2.lib vtkDomainsChemistryOpenGL2-8.2.lib vtkdoubleconversion-8.2.lib vtkexodusII-8.2.lib vtkexpat-8.2.lib vtkFiltersAMR-8.2.lib vtkFiltersCore-8.2.lib vtkFiltersExtraction-8.2.lib vtkFiltersFlowPaths-8.2.lib vtkFiltersGeneral-8.2.lib vtkFiltersGeneric-8.2.lib vtkFiltersGeometry-8.2.lib vtkFiltersHybrid-8.2.lib vtkFiltersHyperTree-8.2.lib vtkFiltersImaging-8.2.lib vtkFiltersModeling-8.2.lib vtkFiltersParallel-8.2.lib vtkFiltersParallelImaging-8.2.lib vtkFiltersPoints-8.2.lib vtkFiltersProgrammable-8.2.lib vtkFiltersSelection-8.2.lib vtkFiltersSMP-8.2.lib vtkFiltersSources-8.2.lib vtkFiltersStatistics-8.2.lib vtkFiltersTexture-8.2.lib vtkFiltersTopology-8.2.lib vtkFiltersVerdict-8.2.lib vtkfreetype-8.2.lib vtkGeovisCore-8.2.lib vtkgl2ps-8.2.lib vtkglew-8.2.lib vtkhdf5-8.2.lib vtkhdf5_hl-8.2.lib vtkImagingColor-8.2.lib vtkImagingCore-8.2.lib vtkImagingFourier-8.2.lib vtkImagingGeneral-8.2.lib vtkImagingHybrid-8.2.lib vtkImagingMath-8.2.lib vtkImagingMorphological-8.2.lib vtkImagingSources-8.2.lib vtkImagingStatistics-8.2.lib vtkImagingStencil-8.2.lib vtkInfovisCore-8.2.lib vtkInfovisLayout-8.2.lib vtkInteractionImage-8.2.lib vtkInteractionStyle-8.2.lib vtkInteractionWidgets-8.2.lib vtkIOAMR-8.2.lib vtkIOAsynchronous-8.2.lib vtkIOCityGML-8.2.lib vtkIOCore-8.2.lib vtkIOEnSight-8.2.lib vtkIOExodus-8.2.lib vtkIOExport-8.2.lib vtkIOExportOpenGL2-8.2.lib vtkIOExportPDF-8.2.lib vtkIOGeometry-8.2.lib vtkIOImage-8.2.lib vtkIOImport-8.2.lib vtkIOInfovis-8.2.lib vtkIOLegacy-8.2.lib vtkIOLSDyna-8.2.lib vtkIOMINC-8.2.lib vtkIOMovie-8.2.lib vtkIONetCDF-8.2.lib vtkIOParallel-8.2.lib vtkIOParallelXML-8.2.lib vtkIOPLY-8.2.lib vtkIOSegY-8.2.lib vtkIOSQL-8.2.lib vtkIOTecplotTable-8.2.lib vtkIOVeraOut-8.2.lib vtkIOVideo-8.2.lib vtkIOXML-8.2.lib vtkIOXMLParser-8.2.lib vtkjpeg-8.2.lib vtkjsoncpp-8.2.lib vtklibharu-8.2.lib vtklibxml2-8.2.lib vtkLocalExample-8.2.lib vtklz4-8.2.lib vtklzma-8.2.lib vtkmetaio-8.2.lib vtkNetCDF-8.2.lib vtkogg-8.2.lib vtkParallelCore-8.2.lib vtkpng-8.2.lib vtkproj-8.2.lib vtkpugixml-8.2.lib vtkRenderingAnnotation-8.2.lib vtkRenderingContext2D-8.2.lib vtkRenderingContextOpenGL2-8.2.lib vtkRenderingCore-8.2.lib vtkRenderingFreeType-8.2.lib vtkRenderingGL2PSOpenGL2-8.2.lib vtkRenderingImage-8.2.lib vtkRenderingLabel-8.2.lib vtkRenderingLOD-8.2.lib vtkRenderingOpenGL2-8.2.lib vtkRenderingVolume-8.2.lib vtkRenderingVolumeOpenGL2-8.2.lib vtksqlite-8.2.lib vtksys-8.2.lib vtktheora-8.2.lib vtktiff-8.2.lib vtkverdict-8.2.lib vtkViewsContext2D-8.2.lib vtkViewsCore-8.2.lib vtkViewsInfovis-8.2.lib vtkzlib-8.2.lib
- 向系统环境变量中(Win10)的Path添加
Install
下的bin
文件夹,我配置的为D:\SoftWare\VTK\Install\bin\
- 向
helloVtk.cxx
中粘贴示例程序代码
/*=========================================================================
Program: Visualization Toolkit
Module: Cube.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// This example shows how to manually create vtkPolyData.
// For a python version, please see:
// [Cube](https://lorensen.github.io/VTKExamples/site/Python/DataManipulation/Cube/)
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCellArray.h>
#include <vtkFloatArray.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <array>
int main()
{
vtkNew<vtkNamedColors> colors;
std::array<std::array<double, 3>, 8> pts = { {{{0, 0, 0}},
{{1, 0, 0}},
{{1, 1, 0}},
{{0, 1, 0}},
{{0, 0, 1}},
{{1, 0, 1}},
{{1, 1, 1}},
{{0, 1, 1}}} };
// The ordering of the corner points on each face.
std::array<std::array<vtkIdType, 4>, 6> ordering = { {{{0, 1, 2, 3}},
{{4, 5, 6, 7}},
{{0, 1, 5, 4}},
{{1, 2, 6, 5}},
{{2, 3, 7, 6}},
{{3, 0, 4, 7}}} };
// We'll create the building blocks of polydata including data attributes.
vtkNew<vtkPolyData> cube;
vtkNew<vtkPoints> points;
vtkNew<vtkCellArray> polys;
vtkNew<vtkFloatArray> scalars;
// Load the point, cell, and data attributes.
for (auto i = 0ul; i < pts.size(); ++i)
{
points->InsertPoint(i, pts[i].data());
scalars->InsertTuple1(i, i);
}
for (auto&& i : ordering)
{
polys->InsertNextCell(vtkIdType(i.size()), i.data());
}
// We now assign the pieces to the vtkPolyData.
cube->SetPoints(points);
cube->SetPolys(polys);
cube->GetPointData()->SetScalars(scalars);
// Now we'll look at it.
vtkNew<vtkPolyDataMapper> cubeMapper;
cubeMapper->SetInputData(cube);
cubeMapper->SetScalarRange(cube->GetScalarRange());
vtkNew<vtkActor> cubeActor;
cubeActor->SetMapper(cubeMapper);
// The usual rendering stuff.
vtkNew<vtkCamera> camera;
camera->SetPosition(1, 1, 1);
camera->SetFocalPoint(0, 0, 0);
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer(renderer);
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(renWin);
renderer->AddActor(cubeActor);
renderer->SetActiveCamera(camera);
renderer->ResetCamera();
renderer->SetBackground(colors->GetColor3d("Cornsilk").GetData());
renWin->SetSize(600, 600);
// interact with data
renWin->Render();
iren->Start();
return EXIT_SUCCESS;
}
- 注意!有的示例程序不含下面的代码,会导致报错,这是由于未使用CMake进行配置,所以需要在源代码前面加上这些。
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
- 配置完成,依然是设置成x64,可以运行demo了。
- 运行结果如图,大功告成!