作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
VTK是什么?
VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。VTK是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。
它以用户使用的方便性和灵活性为主要原则,具有如下的特点:
-
具有强大的三维图形功能。Visualization Toolkit 既支持基于体素Voxel-basedrendering 的体绘制Volume Rendering,又保留了传统的面绘制,从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
-
Visualization Toolkit 的体系结构使其具有非常好的流streaming和高速缓存caching 的能力,在处理大量的数据时不必考虑内存资源的限制。
-
Visualization Toolkit 能够更好的支持基于网络的工具比如Java 和VRML 。随着Web 和Internet 技术的发展VisualizationToolkit 有着很好的发展前景。
-
能够支持多种着色如OpenGL 等。
-
Visualization Toolkit 具有设备无关性,其代码具有良好的可移植性。同时,官方也给出了各个编译器的技术文档与案例、教程。
-
VTK应用程序使用Filter(过滤器)操作数据,每个过滤器检查其接受的数据并产生输出数据。多个Filter与数据源组成一个数据流网络。可配置的网络将原始数据转换为更易理解的模式。
-
Visualization Toolkit 具有更丰富的数据类型,支持对多种数据类型进行处理。其核心数据模型能够表示几乎所有与物理科学相关的现实世界问题,适合涉及有限差分和有限元解决方案的医学成像和工程工作。
-
既可以工作于Windows 操作系统又可以工作于Unix 操作系统极大的方便了用户。
通过VTK将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。核医学成像:心脏SPECT图像(短轴视图)与心脏三维模型的融合。将仪器采集的实验数据通过计算机模拟成像,有助于发现医学问题。在航空航天方面,模拟飞行器轨道实验、风洞实验等,通过计算机模拟减少实际实验次数,可以降低成本,并可以多次实验找出问题。
下载与编译
1)网站:Download | VTK,下载VTK压缩包。
我下载的版本是9.3,百度云地址:
链接:https://pan.baidu.com/s/1ZUdeWQOJuKAzf-VoC0Nueg
提取码:4mgp
2)解压后如下图所示,还需要用CMake进行编译。
CMake安装和配置参考:https://zhaitianbao.blog.csdn.net/article/details/120222654
3)安装好CMake后,按Win+R打开运行,输入cmd打开命令运行窗,输入cmake-gui,中间无空格,会出现cmake界面。source输入VTK的文件路径,build可以在其路径下创建个build文件夹,如下图所示。勾选advanced。
4)点击configure配置,我是vs2017 x64,点确定就开始运行了。
5)configure第一次后应该要进行一次配置。BUILD_SHARED_ILBS打钩,为了后面生成库;CMAKE_INSTALL_PREFIX设置生成库的路径,建议是在VTK目录下创建个bin文件。
6)然后再次点击configure,只要有红色就再点,等没有红色后点击generate,生成完毕后build文件如下所示。点击sln进入项目。
7)进入build文件夹,点击sln项目工程文件;选中ALL_BUILD,选择release/debug,再点击生成ALL_BUILD,此时会进行一段时间的编译操作;再选中INSTALL,点击仅生成,等待结束去看之前设置的bin文件夹,分别是DLL、头文件和LIB。
8)至此,VTK库的编译已经结束。
配置与测试
1)编辑环境变量,输入bin文件路径。
2)创建一个VS项目,可以单项目配置也可以全局配置,我喜欢每个项目独立开,各配置各的,就这样演示了。在项目设置中,包含目录中放include路径,库目录放lib路径。
3)链接器-输入-附加依赖项和lib名字全放进去,因为名字太多,可以找到lib目录,在路径框里输入cmd,这样可以快速定位到当前位置,然后输入下方命令,即可快速获取lib的名字排列。
dir /b *.lib>out.txt
4)接下来,开始测试,输入下方代码,看看VS有没有异常提示,如果没有就直接运行,就ok啦。
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>int main() {// 创建圆柱体源vtkSmartPointer<vtkCylinderSource> cylinderSource = vtkSmartPointer<vtkCylinderSource>::New();cylinderSource->SetResolution(50); // 设置圆柱体的分辨率cylinderSource->SetHeight(3.0); // 设置圆柱体的高度cylinderSource->SetRadius(1.0); // 设置圆柱体的半径// 创建一个数据映射器vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(cylinderSource->GetOutputPort());// 创建一个演员vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);// 创建一个渲染器vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(actor);renderer->SetBackground(0.1, 0.2, 0.4); // 设置背景色为蓝色// 创建一个渲染窗口vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);// 创建一个交互器vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);// 开始渲染和交互renderWindow->Render();renderWindowInteractor->Start();return 0;
}
已编译好的库
百度云地址:
链接:https://pan.baidu.com/s/1Zyf2CsUp2nQ6TKf4HH84SA
提取码:wdsb
VTK和OpenGL一样都是做三维计算机图形学的,不过OpenGL更通用,目前我刚加入医学领域,还有很多要学习的地方,有方便分享和记录的内容我会同步更新。
以上就是“Windows下用CMake编译VTK及配置测试”的过程。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!