1、从零开始学习VTK
可能在这之前你没有使用过VTK,甚至不知道VTK是什么东西。这里假定你没有一点VTK基础,但已经有了一些基本的C/C++编程基础,以及计算机图形学的理论知识储备,想使用VTK从事相关的项目开发,又不想查看VTK海量的英文文档,但又想快速入门。
好吧,废话少说。从VTK最基础的部分开始学起。
1.1 什么是VTK?
VTK,全称为Visualization Toolkit,也就是可视化工具包。是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。
VTK最早是作为Prentice Hall在1993年出版的《TheVisualization Toolkit: An Object-Oriented Approach to 3D Graphics》一书的附件出现的。该书及相应的VTK软件是由美国GE公司的三位研究人员:Ken Martin、Will Schroeder和Bill Lorensen用其闲暇时间合作编著与开发的,因此该软件的授权完全由这三位决定。由于其开放源码式的授权,该书一上市后,很快就建立起VTK的使用者及开发者社区交流平台,同时GE(特别是GE医疗系统)与其他数间公司也开始提供对VTK的支援。1998年,Will Schroeder和Ken Martin离开GE创立了Kitware公司(http://www.kitware.com)。有了Kitware的资金支持,VTK社区快速地成长,其在学术研究及商业应用领域都受到重用,例如Slicer生物医学计算软件使用VTK作为其核心,许多讨论研究VTK的IEEE论文出现。VTK也是许多大型研究机构,如Sandia,Los Alamos及Livermore国家实验室与Kitware的合作基础,这些研究中心使用VTK作为数据可视化处理工具。VTK同时也是美国国家卫生研究院(National Institutesof Health,NIH)创立的美国国家医学影像计算合作联盟(National Alliance forMedical Image Computing, NA-MIC,http://www.na-mic.org)的关键计算工具。
1.2 VTK能做什么?
三维计算机图形、图像处理及可视化是VTK主要的应用方向。通过VTK可以将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。
VTK包含一个C++类库,众多的翻译接口层,包括Tcl/Tk,Java,Python。VTK是在三维函数库OpenGL的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。比如VTK将我们在表面重建中比较常见的MarchingCubes算法进行封装,以类的形式供用户使用,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写MarchingCubes算法的代码,而直接使用VTK中已经提供的vtkMarchingCubes类。
VTK是给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具。它具有如下特点:
(1)具有强大的三维图形功能。VTK既支持基于体素的体绘制(Voxel-BasedVolume Rendering),又保留了传统的面绘制(SurfaceRendering),从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
(2)VTK的体系结构使其具有非常好的流streaming和高速缓存caching的能力,在处理大量的数据时不必考虑内存资源的限制。
(3)VTK能够更好的支持基于网络的工具,比如Java和VRML。随着Web和Internet技术的发展,VTK有着很好的发展前景。
(4)能够支持多种着色,如OpenGL等。
(5)VTK具有设备无关性,使其代码具有良好的可移植性。
(6)VTK中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。
(7)VTK具有更丰富的数据类型,支持对多种数据类型进行处理。
(8)VTK的跨平台特性方便了各类用户。
1.3 如何获取VTK源码?
VTK是开放源码的,可以自由地从VTK网站(http://www.vtk.org)上免费获取到VTK的源代码,VTK源码的下载页面:http://www.vtk.org/VTK/resources/software.html。截至目前(2013年1月)VTK官方发布的最新稳定版本为5.10.1。
以VTK5.10.1为例,在Windows下编译安装VTK需要下载的文件有:
(1) vtk-5.10.1.zip(或者是vtk-5.10.1.tar.gz) —— 该文件包含VTK所有的核心源代码以及相关的示例程序,地址为:http://www.vtk.org/files/release/5.10/vtk-5.10.1.zip,该文件必须下载。
(2) vtkdata-5.10.1.zip(或者是vtkdata-5.10.1.tar.gz) —— 该文件包含VTK自带的例子或测试程序运行时需要用到的数据,可选下载,下载地址为:http://www.vtk.org/files/release/5.10/vtkdata-5.10.1.zip。
(3) vtkDocHtml-5.10.1.tar.gz —— 这个文件是VTK的文档文件,在Windows下解压后,打开index.html文件即可查看VTK各个类以及接口的相关介绍。下载地址:http://www.vtk.org/files/release/5.10/vtkDocHtml-5.10.1.tar.gz,对VTK初学者来说,建议下载。这些HTML文档都是由Doxygen工具(http://www.doxygen.org/)根据各个类的头文件自动生成的。
(4) vtk-5.10.1-win32-x86.exe—— Windows下安装完这个程序以后,可以运行文件后缀为.tcl的Tcl脚本程序,VTK自带的很多例子都是以Tcl脚本写成的,后续内容会介绍如何运行VTK的Tcl脚本程序,建议下载安装这个程序。下载地址:http://www.vtk.org/files/release/5.10/vtk-5.10.1-win32-x86.exe。
除了可以下载VTK官方发布的稳定版本,还可以下载到最新的开发版本。VTK的代码管理是采用分布式版本控制工具Git,所以如果要下载到最新的VTK源码,需要先安装Git,要求Git的版本至少为1.6.6。
Windows下可以下载文件:Git-1.7.9-preview20120201.exe(下载地址:http://code.google.com/p/msysgit/downloads/list)。安装完该应用程序以后,如果想使用带用户图形界面的Git,需要下载安装TortoiseGit工具,下载地址为:http://code.google.com/p/tortoisegit/downloads/list。这些准备工作完成以后,就可以使用TortoiseGit从VTK代码仓库中获取VTK最新的源码,具体步骤参考图1.1—图1.5。
图1.1在D盘(这里以D盘为例)下新建文件夹VTK-5.10(例如,完整路径为D:\Toolkits\VTK\VTK-5.10),然后右击该文件夹,从弹出的菜单里选择“GitClone…”选项。
图1.2在“Gitclone – TortoiseGit”对话框的Url选项框里输入VTK的Git仓库地址(http://vtk.org/VTK.git),Directory一栏输入上一步新建的文件夹路径,即D:\Toolkits\VTK\VTK-5.10\,然后点击OK按钮,即开始从VTK的Git仓库复制代码。
图1.3开始从VTK的Git仓库复制代码的TortoiseGit界面
图1.4代码复制完成时的TortoiseGit界面
图1.5最新版本的VTK源文件目录结构
同样的步骤也可以下载VTKData,其Git地址为:http://vtk.org/VTKData.git,不再赘述。
除了采用带用户图形界面的TortoiseGit下载VTK,也可以使用Git命令下载,具体步骤为:
打开CMD窗口,同样以D盘为例,依次输入如下命令:
>D:
>mkdirToolkit
>cdToolkit
>mkdirVTK
>cdVTK
>mkdirVTK-5.10
>cdVTK-5.10
>gitclone http://vtk.org/VTK.git. (注意最后有一个点,表示当前目录)
Git开始从VTK Git仓库里复制代码,如图1.6所示。
图1.6用Git命令从VTK代码仓库里复制VTK源码
1.4 VTK学习资源
对于很多VTK初学者而言,可能一开始都会抱怨VTK的参考资料太少。其实不然,VTK可以借鉴参考的资料是非常多的,下面列出一些与VTK相关的学习资源。
(1) 《VTK User’s Guide》这本书的最新版本(11thEdition)是以VTK 5.4为基础,主要介绍VTK类库的应用,Kitware公司出版。
(2) 《The VisualizationToolkit An Object-Oriented Approach To 3D Graphics》是与《VTK User’s Guide》配套的教科书,深入讲解了许多VTK里的算法、数据结构等。
(3) 《Source》是Kitware公司按季度发行的内部刊物,里面涵盖了Kitware公司的所有开源项目。一旦有新的功能加进VTK时,会有相关的文章发表在《Source》上。与VTK相关的其他有用的资源、入门等文章也会在该季刊上发表。《Source》在线访问地址为:http://www.kitware.com/products/thesource.html。
(4) VTK在线帮助文档(http://www.vtk.org/doc/nightly/html/index.html)或离线帮助文档(即1.3一节里下载的vtkDocHtml-5.10.1.tar.gz文件)。VTK每个类都提供不同的接口以实现不同的功能,通过文档查询能了解到这些类的功能及其方法的使用。除在线帮助文档之外,VTK主页上还有Wiki、常见问题解答等页面的入口,这些都是学习VTK不可多得的资料。
(5) VTKusers邮件列表。VTK users邮件列表可以让用户和开发者提问题以及接收别人的解答、发布更新以及提出改进系统的建议等等。VTK users邮件列表的地址:http://public.kitware.com/mailman/listinfo/vtkusers。
(6) InsightJournal (http://insight-journal.org/)同样也是学习VTK非常有参考价值的网站。用户可以通过这个网站向VTK社区贡献自己的代码,同样也能下载到别人上传的代码,用于学习、研究等。
1.5 小结
通过这一节的学习,我们知道什么是VTK;VTK能做些什么事情;以及重点讲解了怎么获取VTK的源码,最后列举了除本书以外的其他VTK的学习资源。
1.6 参考资料
[1] VTK百度百科介绍:http://baike.baidu.com/view/627777.htm
[2] VTK维基百科介绍:http://en.wikipedia.org/wiki/VTK