VTK,是一个用于科学数据可视化的开源软件系统。它的核心概念是可视化管线,也就是一系列的数据处理模块,每个模块都有输入和输出,可以相互连接,形成一个数据流网络。可视化管线的基本组成部分有三种:数据源、数据过滤器和数据映射器
1 可视化管线pipline
- 数据源:数据源是可视化管线的起点,它可以从文件、内存或其他来源读取数据,然后将数据转换为vtk的标准数据结构,如多维数组、网格、点云等。
- 数据过滤器:数据过滤器是可视化管线的中间环节,它可以对数据进行各种操作,如裁剪、平滑、提取、变换、计算等。数据过滤器可以有多个输入和多个输出,可以实现复杂的数据处理逻辑
- 数据映射器:数据映射器是可视化管线的终点,它可以将数据转换为图形原语,如点、线、面、体等。数据映射器还可以将数据的属性,如颜色、透明度、纹理等,映射到图形原语上,从而实现数据的可视化表达。
可视化管线的优点是,它可以实现数据的模块化、可重用和可交互的处理和显示。用户可以根据自己的需求,灵活地组合不同的数据源、数据过滤器和数据映射器,形成不同的可视化效果。用户还可以通过修改数据源的参数或数据过滤器的设置,实时地更新可视化结果。
所以,根据这个路线,我们使用vtk编写代码的时候通常是:定义数据源、过滤器、Mapper、actor、render、window、interactor,然后将他们组装起来。
所以一个完整的VTK可视化流程包括以下几个部分:
- Source 数据源
- Filter 过滤器
- Mapper 映射器
- Actor 角色
- Render 渲染窗口
1.1 映射器 Mapper
vtk的映射器Mapper是一个抽象类,它定义了将数据集映射到图形系统中进行可视化的接口。vtk的映射器Mapper有多个子类,根据不同的数据类型和渲染方式,可以分为以下几类:
- vtkPolyDataMapper:将多边形数据(vtkPolyData)映射到图形原语,如点、线、面等。它是最常用的映射器类,可以实现各种几何数据的可视化。
- vtkDataSetMapper:将任意类型的数据集(vtkDataSet)映射到图形原语,如点、线、面等。它是一个通用的映射器类,可以处理不规则的数据结构,如体数据、非结构化网格等。
- vtkImageMapper:将图像数据(vtkImageData)映射到屏幕坐标中,以像素为单位进行显示。它是一个二维的映射器类,可以实现图像数据的可视化。
- vtkVolumeMapper:将体数据(vtkImageData)映射到体元素(voxel)中,以体绘制的方式进行显示。它是一个三维的映射器类,可以实现体数据的可视化。
- vtkCompositePolyDataMapper:将复合多边形数据(vtkCompositeDataSet)映射到图形原语,如点、线、面等。它是一个复合的映射器类,可以处理由多个多边形数据组成的数据集,如多块数据、多分辨率数据等。
vtk的映射器Mapper的主要功能是:
- 将数据的属性,如颜色、透明度、纹理等,映射到图形原语上,从而实现数据的可视化表达。
- 将数据的坐标,如世界坐标、模型坐标、纹理坐标等,映射到图形系统中,从而实现数据的空间变换。
- 将数据的拓扑,如点、线、面、体等,映射到图形系统中,从而实现数据的结构表示。
vtk的映射器Mapper的主要属性有:
- Input:设置或获取映射器的输入数据集。
- LookupTable:设置或获取映射器的颜色查找表,用于将数据的标量值映射到颜色值。
- ScalarRange:设置或获取映射器的标量范围,用于指定颜色查找表的有效区间。
- ScalarVisibility:设置或获取映射器的标量可见性,用于控制是否使用标量数据来控制图形原语的颜色。
- ScalarMode:设置或获取映射器的标量模式,用于指定是使用点数据还是单元数据来作为标量数据。
- ColorMode:设置或获取映射器的颜色模式,用于指定是使用颜色查找表还是直接使用RGB颜色值来作为图形原语的颜色。
1.2 角色 actor (prop)
vtk的角色Actor是一个继承自vtkProp3D的类,它表示了一个可视化对象(几何数据和属性)在渲染场景中的存在。vtk的角色Actor主要包含以下几个部分:
- Mapper:设置或获取角色的映射器,用于将数据集转换为图形原语,如点、线、面、体等。
- Property:设置或获取角色的属性,用于控制图形原语的外观,如颜色、透明度、纹理等。
- Texture:设置或获取角色的纹理,用于给图形原语添加表面细节,如图案、贴图等。
- Position:设置或获取角色的位置,用于指定角色在世界坐标系中的原点位置。
- Orientation:设置或获取角色的方向,用于指定角色在世界坐标系中的旋转角度。
- Scale:设置或获取角色的缩放,用于指定角色在世界坐标系中的缩放比例。
vtk的角色Actor的主要功能是:
- 将数据集映射到图形原语,并根据属性和纹理进行渲染,从而实现数据的可视化表达。
- 将角色的位置、方向和缩放映射到世界坐标系,并根据渲染器的相机进行投影,从而实现数据的空间变换。
- 将角色的可见性、透明度、阴影、光照等映射到渲染器的设置,并根据渲染模式进行绘制,从而实现数据的渲染控制。
1.3 过滤器 filter
在vtk中前两者是必要的,filter则可以根据实际需求进行添加。vtk的过滤器Filter是一种用于处理数据的算法类,它可以接收一个或多个输入数据集,经过一定的变换或计算,产生一个或多个输出数据集。Filter的输入和输出数据集可以是不同的类型,例如,vtkPolyData、vtkImageData、vtkUnstructuredGrid等。Filter之间可以通过端口(Port)连接,形成一个可视化管线(Pipeline)。
vtk的过滤器Filter可以分为三大类:源对象(Source)、可视化滤波器(Visualization Filter)和成像滤波器(Imaging Filter)。
源对象(Source)是一种没有输入数据集,只有输出数据集的Filter,它可以从文件中读取数据,或者根据一些参数生成数据,例如,vtkConeSource、vtkSphereSource、vtkImageNoiseSource等。
可视化滤波器(Visualization Filter)是一种用于处理几何数据的Filter,它可以对输入数据集进行剪切、平滑、细分、采样、映射等操作,以便于渲染和显示,例如,vtkClipPolyData、vtkSmoothPolyDataFilter、vtkGlyph3D等。
成像滤波器(Imaging Filter)是一种用于处理图像数据的Filter,它可以对输入图像进行滤波、变换、分析、融合等操作,以便于图像处理和分析,例如,vtkImageGaussianBlur、vtkImageFFT、vtkImageBlend等。
vtk的过滤器Filter类都继承自vtkAlgorithm类,它提供了一些通用的方法和属性,例如,SetInputConnection、GetOutputPort、Update等。Filter类还可以根据输入和输出数据集的类型,继承自一些特定的基类,例如,vtkPolyDataAlgorithm、vtkImageAlgorithm、vtkUnstructuredGridAlgorithm等,这些基类提供了一些方便的方法和属性,例如,GetInput、GetOutput、SetOutput等。
vtk的过滤器Filter类的核心方法是RequestData,它负责处理输入数据集,并生成输出数据集。Filter类还可以重写一些其他的方法,例如,RequestInformation、RequestUpdateExtent、FillInputPortInformation等,以实现更复杂的功能和逻辑。