6.1 vtkPolyData数据生成与显示

1.VTK图像处理引言
图像数据的应用非常广泛,最贴近日常生活的应用是3D游戏,其中每个角色的模型、场景等都是图形数据。当然,游戏仅仅是图像数据的一个应用点。图形在CAD(计算机辅助设计)、影视、医学、地质、气象数据建模等领域中均有着广泛的应用。vtkPolyData是VTK中常用的数据结构之一,可以表示小到一个点、一条线,达到一个模型、一个场景等。


2.vtkPolyData数据生成与显示
之前也曾说过,在这里只是简单的回顾,更重要滴在于深入地理解。
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 coneSource = vtkSmartPointer::New();
	coneSource->Update();

	vtkSmartPointer polyData = vtkSmartPointer::New();
	polyData = coneSource->GetOutput();
	int nPoints = polyData->GetNumberOfPoints(); //获取图形数据的点数
	int nCells = polyData->GetNumberOfCells();   //获取图形数据的单元数目
	std::cout << "几何数据(点数):" << nPoints << std::endl;
	std::cout << "拓扑数据(单元):" << nCells << std::endl;

	vtkSmartPointer mapper = vtkSmartPointer::New();
	mapper->SetInputData(polyData); //vtkPolyDataMapper用于接受VTKPolyData图形数据以实现图像数据到渲染图元的转换

	vtkSmartPointeractor = vtkSmartPointer::New();
	actor->SetMapper(mapper);

	vtkSmartPointer render = vtkSmartPointer::New();
	render->AddActor(actor);
	render->SetBackground(10, 0, 0);

	vtkSmartPointer rw = vtkSmartPointer::New();
	rw->AddRenderer(render);
	rw->SetSize(640,480);
	rw->SetWindowName("polyData Structure Learning ");
	rw->Render();

	vtkSmartPointer rwi = vtkSmartPointer::New();
	rwi->SetRenderWindow(rw);
	rwi->Initialize();
	rwi->Start();

	return 0;
}

运行结果如下:

6.1 vtkPolyData数据生成与显示_第1张图片

解析:从结果可以看出,该椎体是由7个空间点构成了7个单元的数据组成。这里也仅仅定义了一个空间的椎体,并未给点或者单元数据设置属性信息。

上述代码中,VTKConeSource类定义了一个锥形图形数据,其输出为VTKPolyData类型数据。VTKPolyData的成员函数GetNumberOfPoints()和GetNumberOfCells()分别用来获取图形数据的点数和单元数目。
接下来是定义一个图形数据的渲染管线,包括VTKPolyDataMapper()、vtkActor()、VTKRender()、vtkRenderWindow()和vtkRenderWindowInteractor()。这个渲染流程和图像渲染管线基本一致。需要注意的是,对于VTKPolyData类型数据的渲染管线,需要定义vtkPolyDataMapper对象,用于接受VTKPolyData图形数据以实现图像数据到渲染图元的转换。

参考资料:

1.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》
2. 张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

所用软件:vtk7.0+visual studio 2013


注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:

https://blog.csdn.net/www_doling_net/article/details/8541534

https://blog.csdn.net/shenziheng1/article/category/6114053/4
 

你可能感兴趣的:(VTK)