【VTK学习笔记-04】VTK基本数据结构

学习教程:《VTK图形图像开发进阶》张晓东,罗火灵
特别感谢:东灵工作室

3.1 可视化数据的基本特点

(1)离散性。

  • 从无限、连续的空间获得有限个数的采样点的过程就是一个离散化过程。
  • 而对于其他无法通过采样获得的值,通常是通过插值的方式获取。线性插值是常用的插值方法,非线性插值方法更加精确。

(2)数据具有规则或不规则的结构(结构化与非结构化)

  • 结构化:规则结构数据点之间有固定的关联关系,存储时只需存储起始点、相邻两点间隔以及点的总数就可以保存完整的数据信息。
  • 非结构化:在数据变化频繁的区域可以密集表示,在变化不频繁的区域则稀疏表示。在数据表达方面更加自由、细致、灵活。

(3)数据具有维度

  • 拓扑维度。可视化数据具有零维、一维、二维、三维等任意维度。

零维:点
一维:曲线
二维:曲面
三维:体

3.2 数据对象和数据集

3.2.1 vtkDataObject(数据对象)

在VTK中,数据一般以数据对象Data Object,类vtkDataObject的形式表现,这是VTK中可视化数据最常用的表达形式。数据对象是数据的集合,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。

在实际应用中,根据具体的可视化数据选择具体的子类来实现可视化。

在这里插入图片描述

3.2.2 vtkDataSet(数据集)

将数据对象组织成一种结构并赋予相应的属性值,就形成了数据集。

vtkDataSet是vtk中与数据集对应的类,该类直接从vtkDataObject派生。vtkDataSet由两部分组成,组织结构和属性数据。

vtkDataSet组织结构由拓扑结构几何结构两部分组成。拓扑结构描述了对象的构成形式,而几何结构描述了对象的空间位置关系。

例如,在屏幕上显示一个三角形,定义三个点的坐标则为数据集的几何结构,而他们之间的连接则构成了数据集的拓扑结构。即点数据定义了数据集的几何结构,单元数据定义了数据集的拓扑结构。

在这里插入图片描述

3.3 单元类型

一系列有序的点按指定类型连接所定义的结构就是单元,单元是VTK可视化系统的基础。
单元是由单元的类型(如六面体)和构成单元的顶点列表两部分构成。

单元就是一个有顺序的点集。单元的类型决定了点集里点的顺序(即单元的拓扑),而定义单元的点的个数就是该单元的大小。

VTK里单元的类型定义在vtkCellType.h文件里。

单元类型的线性与非线性的划分主要是以插值函数为依据的。

  • 对于线性单元,采用的是线性或者常量插值函数。
  • 而非线性单元可以提供更准确的插值函数,但是不被图形库直接支持。因此,常用的策略是:将非线性单元细分成线性单元,再把细分的结果当做线性单元来处理。

3.4 属性数据

属性数据主要用来描述数据集的属性特征,对数据集的可视化实质上就是对属性数据的可视化。

根据数据的性质,属性数据可分为标量数据、矢量数据、张量数据等几大类。属性数据可以抽象为n维的数组。

标量数据

矢量数据:矢量数据的三维方向上可用三元组表示,颜色RGB等标量数据也可用类似的三元组的结构表示。

纹理坐标:可以将点从笛卡尔坐标空间映射到一维、二维或三维的纹理空间中。

张量数据:一个k阶的张量可当作一个k维的表格。零阶的张量是标量,一阶的张量是矢量,二阶的张量是纹理坐标,三阶的张量是一个三维阵列,VTK只支持3*3的对称的张量。
在这里插入图片描述

3.5 不同类型的数据集

数据集的类型由它的组织结构决定,同时数据集的类型决定了点和单元之间的相互关系。
在这里插入图片描述

  1. vtkImageData
    按规则排列在矩形方格中的点和单元的集合。vtkImageData是由一维的线、二维的像素或三维的体素组成,它的几何结构和拓扑结构都是规则的。
    在这里插入图片描述

  2. vtkPolyData
    多边形数据集。vtkPolyData是由顶点、多顶点、线、折线和三角形条带等单元构成,多边形数据是不规则结构的。
    用一个三角形条带表达N个三角形只需要用N+2个点,而且大多数图形库渲染三角形条带的速度比直接渲染三角形要快很多。
    在这里插入图片描述

  3. vtkRectilinearGrid
    vtkRectilinearGrid类型的数据是排列在矩形方格中的点和单元的集合,线性网络的拓扑结构是规则的,但是其几何结构只有部分是规则的。即它的点是沿着坐标轴排列的,但是两点间的间隔可能不同。
    在这里插入图片描述

  4. vtkStructuredGrid
    vtkStructuredGrid是结构化网格数据,具有规则的拓扑结构和不规则的几何结构,但是单元没有交叉或重叠。
    在这里插入图片描述

  5. vtkUnstructuredGrid
    vtkUnstructuredGrid是非结构化网格,它的拓扑结构和几何结构都是非结构化的。
    在VTK中,任一类型的数据集都可用非结构化网格来表达,vtkUnstructuredGrid类型数据的存储需要大量的空间,计算时需要消耗大量的资源。
    在这里插入图片描述

  6. vtkUnstructuredPoints
    vtkUnstructuredPoints是非结构化点集,是指不规则分布在空间的点集,用离散点来表达。具有不规则的几何结构,不具有拓扑结构。
    在这里插入图片描述

3.6 数据的存储与表达

数据的存储:

  • 数据通过数据数组(vtkDataArray)形式存储,可以存储标量数据,也可以存储向量数据。数据数组由N个元组(tuple)组成。

  • 元组是数据数组的子数组,用于存储数据类型相同的分量数据。元组的组分个数(NumberOfComponents)称为元组的大小。例如,点、矢量和法向量等属性数据,元组的大小是3,而张量属性数据的元组大小是9(即3*3的矩阵),标量属性数据对元组的大小则没有任何要求。

数据对象的表达:

  • 在vtkDataObject内部有一个vtkFieldData(场数据)的实例,负责对数据的表达。场数据可以看作数据数组的数组,数组里的每一个元素都是一个数组,数组的类型、长度、元组的大小和名称等都可以各不相同。

总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值