VTK基础(02):VTK中的数据结构
VTK中的数据结构
1.数据对象和数据集
(1)数据对象
数据对象是整个可视化流程的核心载体,本质是对现实世界中各类数据的结构化抽象,目的是统一描述数据的“几何信息”、“拓扑结构“和”属性数据“
vtk中的数据一般是以数据对象的形式表现的,vtkDataObj是顶级抽象基类
(2)数据集
vtk中的数据集vtkDataSet直接派生于vtkDataObj,将数据对象组织成一种结构并赋予相应的属性数据;包含:组织结构、属性数据,其中组织结构=几何结构(点)+拓扑结构(单元)
数据集类型如下:
- 线性网格:vtkImageData,点按规则网格排列(类似二维像素或三维体素的阵列),坐标间距均匀,拓扑关系隐含
- 结构网格:点按规则索引排列(类似 vtkImageData 的网格索引),但点的坐标可以非均匀分布(间距可变),拓扑关系隐含(通过索引确定单元连接)
- 非结构网格:点的坐标和单元的拓扑关系均完全不规则,支持任意类型的单元(如四面体、六面体、棱锥体、金字塔等),拓扑关系需显式存储
- 多边形:由不规则的点集和点组成的 “几何图元”(如点、线、多边形、三角形带)构成,拓扑关系显式存储(明确记录哪些点组成一个单元)
2.单元
(1)单元的概念
本质是拓扑连接的抽象,通过点索引定义点与点之间的链接关系
(2)单元的特征
- 点索引:存储单元索引的数组
- 维度:0维(点)、1维(线)、2维(曲面)、3维(体)
- 边界:实体与外界空间的分界面
在代码中是使用枚举值来表示单元类型的
(3)单元的类型
(1)线性单元
- 顶点(Vertex)、多顶点(Polyvertex)、线段(Line)、多段线(Polyline)
- 三角形(Triangle)、三角带(Triangle Trip)、四边形(Quadrilateral)、像素(Pixel)、多边形(Polygon)
- 四面体(Terahedron)、六面体(Hexahedron)、体素(Voxel)
- 三棱柱(Wedge)、四棱锥(Pyramid)
- 五棱柱(Pentagonal prism)、六棱柱(Hexagonal prism)
(2)非线性单元
二次单元,类似线性单元的结构
3.属性数据
(1)标量数据
只有大小没有方向的数据,如温度值、颜射值RGB等
(2)矢量数据
既有大小又有方向的数据,如加速度
(3)张量数据
类似于阵列,0阶的张量是标量、1阶的张量是矢量、二阶的张量是纹理坐标、三阶是阵列
4.数据的存储和表达
(1)数据的存储
VTK中内存分配采用连续内存模式,使用vtkDataArray类的派生类来管理内存的
数据依据分量可分为:单分量和多分量
- 单分量:vtkBitArray、vtkCharArray、vtkShortArray、vtkIntArray、vtkFloatArray、vtkDoubleArray等
- 多分量:vtkVector2iArray、vtkVector3fArray、vtkVector4dArray、vtkMatrix3x3Array 、vtkMatrix4x4Array
(2)数据的表达
将数据抽象为 “几何 + 拓扑 + 属性” 的三元结构