VTK是什么?
VTK,全称是Visualization Toolkit,即可视化工具包。是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。
VTK最早是作为Prentice Hall在1993年出版的《The Visualization 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 Institutes of Health,NIH)创立的美国国家医学影像计算合作联盟(National Alliance for Medical Image Computing,NA-MIC,http://www.na-mic.org)的关键计算工具。
VTK能做什么?
三维计算机图形、图像处理及可视化是VTK主要的应用方向。通过VTK可以将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。
VTK的特点
-
强大的三维图形功能。VTK既支持基于体素的体绘制(Voxel-Based Volume Rendering),又保留了传统的面绘制(Surface Rendering),从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
-
VTK的体系结构使其具有非常好的流Streaming和高速缓存Caching的能力,在处理大量的数据时不必考虑内存资源的限制。
-
VTK能够更好的支持基于网络的工具,比如Java和VRML。随着Web和Internet技术的发展,VTK有着很好的发展前景。
-
能够支持多种着色,如OpenGL等。
-
VTK具有设备无关性,使其代码具有良好的可移植性。
-
VTK中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。
-
VTK具有丰富的数据类型,支持对多种数据类型进行处理。
VTK的配置
VTK的结构
VTK库的框架结构是什么样的?
VTK是在三维函数库OpenGL的基础上,采用面向对象的设计方法发展起来的。
它有2种不同的方式:图形模型
和可视化模型
,图形模型
是3D图形的抽象,可视化模型
是可视化的数据流程模型。
图形模型如图所示,利用了3D图形系统简单易用的特点,同时也采用了图形用户接口(GUI)的方法。
整个图形模型表现了3D图形系统的本质特征,主要有9类基本对象:渲染控制器、渲染窗口、渲染器、灯光、摄像机、角色、特性、映射、变换。
- Render master(渲染控制器)定义与设备无关的坐标计算方法,创建渲染窗口;
- render window(渲染窗口) 管理显示设备上的窗口,一个或多个绘制方法可在渲染窗口上创建一个场景;渲染窗口是用户图形界面,其中包括了设置渲染窗口的大小,产生立体显示效果等方法:
- Renderer(渲染器) 是管理光源照相机和绘制对象等的位置、属性等,提供了世界坐标系,观察坐标系及显示坐标系之间的转换;
- Lights(灯光) 可在场景中照亮绘制对象,可通过调用参数改变控制灯光的状态、照射角度、照射强度、颜色等,
并支持点光源和平行光源。 - Camera(照相机) 是定义观察者的位置、聚焦点和其他有关属性,参数可由调用者根据需要设置。
- Actor(角色) 代表渲染场景中的绘制对象实体,通过参数调节可以设置角色的位置、方向、渲染特性、引用、纹理影射等属性,并可对角色进行缩放。
- Property(属性) 是说明几何物体的一些特性,实现三维图形真实感。
- Transform(变换) 是一个放置4×4变换矩阵的堆栈,可以进行各种操作。图形模型支持3D几何数据绘制、3D体数据绘制、2D几何文字、图像绘制。
- Mapper(映射、制图人) 指定了渲染数据和图形库中基本图元之间的联系,一个或多个角色可以使用相同的映射,有多个参数对其进行控制。
VTK应用程序的框架结构是什么样的?
VTK绘制管线(运行机制)
VTK采用的是Pipeline(管线)运行机制
,几乎可以对任何类型的数据进行处理,并提供了许多相应的类对各种类型的数据进行转换或处理。
根据所要处理的原始数据类型
和所使用的算法
以及所要达到的结果
的不同,可以设计自己的可视化流程,并由此选择不同的数据处理和转换的类,用数据通道
将这些类连接起来,将原始数据类型转换为所采用的算法模块
可以直接进行处理的数据类型,最终得到我们所需要的可视化的结果。所有的类和算法模块都是可扩充的,用户可以将自己开发的类或模块转换成系统可以接受的形式,并可替换或扩充原有的类,因此,VTK是一个开放的系统,可以扩展到任何应用领域。
VTK对体数据进行可视化的步骤如图2所示:
1. 按照所要处理的原始数据类型的不同选择不同的类。vtkObiect
是Visualization Toolkit类库
的基类,它为整个可视化流程提供基本的方法,vtkSource
是vtkObiect
的派生类和vtkFilter
的父类,它为整个可视化流程的开始比如读取数据等定义具体的行为和接口;
2. 过滤器接收数据源中的数据,进行各种不同的过滤操作。vtkFilter
是vtkSource
的派生类,它对数据进行各种处理,将原始数据经过各种过滤器的处理后,转换为可以直接用某种算法模块对其进行处理的形式;
3. 映射是将处理过的适当数据形式映射为几何数据。vtkMapper
也是vtkObiect
的派生类,它将经过各种filter
处理后的应用数据映射为几何数据,为原始数据与图像数据之间定义了接口。
4. 角色将可视化的数据在窗口中表现出来,在Visualization Toolkit
中任何可视化的数据都是通过角色在窗口中表现出来的。
vtkActor类用来表达绘制场景 中的一个实体,它通过SetMappe()
方法将几何数据的属性告诉角色
5. 最后通Actor
通过vtkRender
类将结果在窗口中显示出来。
英文看不习惯的话可以看这张图
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社区贡献自己的代码,同样也能下载到别人上传的代码,用于学习、研究等。
---------------------
作者:DolingStudio
来源:CSDN
原文:https://blog.csdn.net/www_doling_net/article/details/8532492
版权声明:本文为博主原创文章,转载请附上博文链接!