vtkpolydata用来表示顶点、线、多边形、三角形带在内的几何结构,即三维实体。用索引表示而不是坐标表示。
vtkImageData是用每个像素位置和体素位置有没有数据,数据又是什么强度和颜色表示的。用坐标表示,而不是索引关系
VTKPolyData主要由几何结构数据、拓扑结构数据、属性数据组成。
几何结构数据:组成模型的点集;
拓扑结构数据:这些点根据一定的连接关系组成的单元数据;表明集合点集之间的拓扑关系
属性数据:与几何结构数据和拓扑结构数据相关联,属性数据可以是标量、向量或者张量。
例如,可以为其中的每个点定义曲率属性数据,也可以为其中的每一个单元定义一个法向量属性数据。在VTKPolyData可视化中会利用这些属性数据直接或者间接计算单元或点的颜色。
例子:
#include"vtkSmartPointer.h"
#include"vtkConeSource.h" //定义一个锥型图形数据
#include"vtkPolyData.h"
#include"vtkPolyDataMapper.h"
#include"vtkActor.h"
#include"vtkRenderer.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"
int main(){
vtkSmartPointer<vtkConeSource> coneSource = vtkSmartPointer<vtkConeSource>::New();
coneSource->Update();
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData = coneSource->GetOutput();
int nPoints = polyData->GetNumberOfPoints(); //获取图形数据的点数
int nCells = polyData->GetNumberOfCells(); //获取图形数据的单元数目
std::cout << "几何数据(点数):" << nPoints << std::endl;
std::cout << "拓扑数据(单元):" << nCells << std::endl;
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polyData); //vtkPolyDataMapper用于接受VTKPolyData图形数据以实现图像数据到渲染图元的转换
vtkSmartPointer<vtkActor>actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
render->SetBackground(10, 0, 0);
vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New();
rw->AddRenderer(render);
rw->SetSize(640,480);
rw->SetWindowName("polyData Structure Learning ");
rw->Render();
vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
rwi->SetRenderWindow(rw);
rwi->Initialize();
rwi->Start();
return 0;
}
从结果可以看出,该椎体是由7个空间点构成了7个单元的数据组成。这里也仅仅定义了一个空间的椎体,并未给点或者单元数据设置属性信息。
上述代码中,VTKConeSource类定义了一个锥形图形数据,其输出为VTKPolyData类型数据。VTKPolyData的成员函数GetNumberOfPoints()和GetNumberOfCells()分别用来获取图形数据的点数和单元数目。
接下来是定义一个图形数据的渲染管线,包括VTKPolyDataMapper()、vtkActor()、VTKRender()、vtkRenderWindow()和vtkRenderWindowInteractor()。这个渲染流程和图像渲染管线基本一致。需要注意的是,对于VTKPolyData类型数据的渲染管线,需要定义vtkPolyDataMapper对象,用于接受VTKPolyData图形数据以实现图像数据到渲染图元的转换。