准备工作:
1.VTK下载包(此教程使用VTK8.2.0)
2.CMAKE(此教程使用3.29.0) 在此不过多赘述,可在网上搜索cmake安装
3.visual studio(此教程使用vs2019)
VTK下载及编译:
1、找到自己适合的VTK版本,我选择的是VTK8.2.0。
1.1 官网下载:Download | VTK
1.2 百度网盘:https://pan.baidu.com/s/1sF1WxwbQhtcYEpapHTxQ6w?pwd=1111
下载之后进行解压到自己想要解压的路径。
2、VTK编译:
2.1 打开CMake,将含有CMakeLists.txt文件的vtk文件夹路径放入Where is the source code输入框中
2.2建立一个新的文件夹,将其填入Where to build the binaries的输入框中
接着点击Configure,选择自己的Vs版本,我的是vs2019版本的,所以选择vs2019
接下来点击Generate进行生成。
第一次生成之后,会报红,选择CMAKE_INSTALL_PREFIX填写一下自己的安装前缀。安装前缀是自己创建的文件夹,如果填写一个不存在的文件夹,cmake会自动创建。建议建立到vtk目录下。
将VTK_USE_LARGE_DATA取消再次点击Generate进行生成
生成之后,点击Open Project,即可通过vs2019打开此文件,至此CMake完成。
进入到VS2019的vtk项目之中,如果想要生成release版本就直接选择vs2019的release版本,然后再进行ALL_BUILD生成,如果想要生成debug版本,就选择debug之后再进行生成。
生成之后打开vtk中的prefix文件夹中的内容是这样的:
配置自己的系统环境变量:
打开环境配置界面:此电脑--->右键属性--->高级系统设置--->环境变量--->在系统变量中的Path双击打开。
将:D:\vtk8.2\release\bin路径设置进去
接下来就可以配置自己项目中的vtk了:
打开一个vs项目,右键解决方案资源管理器,打开VC++目录:
包含目录配置如下:
库目录配置
然后在vtk的lib目录中,写一个文本文件,名字为release.txt,然后内容为:
dir *.lib /B >re.txt 然后改为bat类型的文件,保存之后运行,会生成当前文件夹下所有的lib文件夹的名称。复制进链接器的输入中的附加依赖项里面。
接下来就可以进行测试了:
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCylinderSource.h>
#include <vtkNamedColors.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <array>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2); //未使用cmake生成的项目需要加
VTK_MODULE_INIT(vtkInteractionStyle);//未使用cmake生成的项目需要加
int main()
{//hello vtk程序
vtkSmartPointer<vtkNamedColors> colors =
vtkSmartPointer<vtkNamedColors>::New();
std::array<unsigned char, 4> bkg{ { 26, 51, 102, 255 } };
colors->SetColor("BkgColor", bkg.data());
vtkSmartPointer<vtkCylinderSource> cylinder =
vtkSmartPointer<vtkCylinderSource>::New();
cylinder->SetResolution(8);
vtkSmartPointer<vtkPolyDataMapper> cylinderMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
cylinderActor->SetMapper(cylinderMapper);
cylinderActor->GetProperty()->SetColor(
colors->GetColor4d("Tomato").GetData());
cylinderActor->RotateX(30.0);
cylinderActor->RotateY(-45.0);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(cylinderActor);
renderer->SetBackground(colors->GetColor3d("BkgColor").GetData());
renderer->ResetCamera();
renderer->GetActiveCamera()->Zoom(1.5);
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->SetSize(300, 300);
renderWindow->AddRenderer(renderer);
renderWindow->SetWindowName("Cylinder");
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}
以此笔记!