跳至主要內容
VTK

VTK

YanZJNNFFPackagepackage大约 5 分钟约 1467 字

简介

可视化工具函数库(VTK, Visualization Toolkit)是一个开源,跨平台,支持平行处理的图形应用函数库(维基百科open in new window)。

VTKopen in new window

VTK是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。

特点

  • 开源,可满足不同用户的需求
  • 支持多种语言,支持C++、Tcl、Java、Python等多种语言环境
  • 封装了目前许多优秀的三维数据场可视化算法,可方便地实现对数据集进行各种操作和变化
  • 生成的三维图像方便交互,代码编写量少
  • 支持多平台,具有平台无关性和良好的可移植性
  • 支持丰富的数据类型

框架结构

VTK 采用的是管线(pipe line)机制,支持有规则或无规则的点阵(Point sets)、图像(Image)、体元数据(Volume)等多种数据类型,并且可以很方便地实现这些数据类型之间的相互转换。

VTK框架
VTK框架

整个可视化流程,可以大致分为两个阶段。一个是数据准备阶段,另一个是渲染阶段。数据准备阶段主要就是读取数据、数据处理(过滤);渲染阶段就是将处理后的数据,生成对应实体,在设定的渲染场景展示,并能够实现交互。

处理对象包括:

  • 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(线性网格数据集)等几大类。

  1. Structured Points
    按规则排列的点的集合。点的排列和坐标轴平行,形成方形的点阵。vtkStructuredPoints 的父类是vtkImageData,vtkImageData是vtkDataSet的子类。

  2. Unstructured Points
    不规则地分布在空间的点集。非结构化点集具有不规则的几何结构,但不具有拓扑结构,用离散点来表达,通常,这类数据没有固定的结构,是由一些可视化程序识别和创建的。

  3. Poly Data
    在VTK中多边形数据集是由顶点、多顶点、线、多线、多边形各三角带构成,多边形数据是非结构化的,并且多边形数据集的单元在拓扑维度上有多种变化,顶点、线和多边形构成了用来表达0、1和2维几何图形的基本要素的最小集合,同时用多顶点、多线和三角形带单元来提高效率和性能,特别是用一个三角形带表达N个三角形只需要用N+2个点,但是用传统的表达方法需要用3N个点。vtkPolyData的父类是vtkPointSet,vtkPointSet是vtkDataSet的子类。

  4. Structured Grid
    具有规则的拓扑结构和不规则的几何结构,但是单元没有重叠或交叉。vtkStructuredGrid的父类是vtkPointSet。

  5. Unstructured Grid
    非结构化网格集是最常见的数据集类型,它的拓扑结构和几何结构都是非结构化的,在此数据集中所有单元类型都可以组成任意组合,所以单元的拓扑结构从零维延伸至三维,在 VTK中任一类型的数据集都可用非结构化网格来表达。vtkUnstructuredGrid的父类是vtkPointSet。

  6. Rectilinear Grid
    是排列在矩形方格中的点和单元的集合,线性网格的拓扑结构是规则的,但其几何结构只有一部分是规则的,也就是说,它的点是沿着坐标轴排列的,但是两点间的间隔可能不同。vtkRectilinearGrid的父类是vtkDataSet。

参考链接:
  1. Doxygen文档open in new window
  2. 可视化工具 VTK 简介open in new window
  3. VTK技术介绍open in new window