VTK
简介
可视化工具函数库(VTK, Visualization Toolkit)是一个开源,跨平台,支持平行处理的图形应用函数库(维基百科)。
VTK
VTK是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。
特点
- 开源,可满足不同用户的需求
- 支持多种语言,支持C++、Tcl、Java、Python等多种语言环境
- 封装了目前许多优秀的三维数据场可视化算法,可方便地实现对数据集进行各种操作和变化
- 生成的三维图像方便交互,代码编写量少
- 支持多平台,具有平台无关性和良好的可移植性
- 支持丰富的数据类型
框架结构
VTK 采用的是管线(pipe line)机制,支持有规则或无规则的点阵(Point sets)、图像(Image)、体元数据(Volume)等多种数据类型,并且可以很方便地实现这些数据类型之间的相互转换。
整个可视化流程,可以大致分为两个阶段。一个是数据准备阶段,另一个是渲染阶段。数据准备阶段主要就是读取数据、数据处理(过滤);渲染阶段就是将处理后的数据,生成对应实体,在设定的渲染场景展示,并能够实现交互。
处理对象包括:
vtkDataSource
源对象:数据生成的源头,数据来源主要包括从磁盘读取数据文件,如VTK所支持的各种格式文件生成数据源对象,这种源对象被称为读源对象,或者利用数学方法生成源对象,如利用多个四边形构建一个圆柱体,这种对象被称为程序源对象。vtkFilter
过滤器对象:对源对象进行处理,生成新的数据集输出,原始的数据能够转换成为可以直接用某种算法进行处理的形式。vtkMapper
映射器对象:映射器对象主要作用是将经过 Filter处理后的应用数据映射成图形模型可以绘制的几何数据,或者以磁盘文件的形式进行输出。它是可视化模型和图形模型之间的接口。
VTK 的特点之一就是对于任何经行可视化的数据都是通过Actor(角色)的形式在窗口中表现出来,所以图形模型主要包括如下部分:
vtkActor
建立actor:通过vtkActor的 SetMapper()方法设置可视化模型的vtkMapper。vtkRender
建立renderer:通过方法AddActor()把上述的 vtkActor添加进来以供显示。vtkRenderWindow
建立renderwindow:vtkRenderWindow通过方法 AddRenderer()添加到绘制窗口中。通常使用类vtkRenderWindowInteractor对目标图形进行交互操作。
数据集
在VTK中数据集的类型主要按构成数据集的几何数据和单元来划分,主要的数据集类型包括:Structured Points(结构化点集)、Unstructured Points (非结构化点集)、Poly Data(多边形数据集)、Structured Grid(结构化网格数据集)、Unstructured Grid(非结构化网格数据集)、Rectilinear Grid(线性网格数据集)等几大类。
Structured Points
按规则排列的点的集合。点的排列和坐标轴平行,形成方形的点阵。vtkStructuredPoints 的父类是vtkImageData,vtkImageData是vtkDataSet的子类。Unstructured Points
不规则地分布在空间的点集。非结构化点集具有不规则的几何结构,但不具有拓扑结构,用离散点来表达,通常,这类数据没有固定的结构,是由一些可视化程序识别和创建的。Poly Data
在VTK中多边形数据集是由顶点、多顶点、线、多线、多边形各三角带构成,多边形数据是非结构化的,并且多边形数据集的单元在拓扑维度上有多种变化,顶点、线和多边形构成了用来表达0、1和2维几何图形的基本要素的最小集合,同时用多顶点、多线和三角形带单元来提高效率和性能,特别是用一个三角形带表达N个三角形只需要用N+2个点,但是用传统的表达方法需要用3N个点。vtkPolyData的父类是vtkPointSet,vtkPointSet是vtkDataSet的子类。Structured Grid
具有规则的拓扑结构和不规则的几何结构,但是单元没有重叠或交叉。vtkStructuredGrid的父类是vtkPointSet。Unstructured Grid
非结构化网格集是最常见的数据集类型,它的拓扑结构和几何结构都是非结构化的,在此数据集中所有单元类型都可以组成任意组合,所以单元的拓扑结构从零维延伸至三维,在 VTK中任一类型的数据集都可用非结构化网格来表达。vtkUnstructuredGrid的父类是vtkPointSet。Rectilinear Grid
是排列在矩形方格中的点和单元的集合,线性网格的拓扑结构是规则的,但其几何结构只有一部分是规则的,也就是说,它的点是沿着坐标轴排列的,但是两点间的间隔可能不同。vtkRectilinearGrid的父类是vtkDataSet。