VTK:图形进阶——vtkPolyData数据生成与显示

1.VTK图像处理引言

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

2.vtkPolyData数据的生成与显示

vtkPolyData主要由几何结构、拓扑结构、属性结构组成。
几何结构:组成模型的点集;
拓扑结构数据:这些点根据一定的连接关于组成的单元数据;表明集合点集之间的饿拓扑关系;
属性数据:与几何结构数据相关联,属性可以是标量、向量或者是张量。
可以是其中的每个店曲率属性数据,也可以为其中的每一个单元定义一个法向量属性数据。在vtkPolyData可视化中会利用这些数据直接或间接计算单元或点的颜色。

3.实例

下述代码中,用VTKConeSource类定义了一个锥形图形数据,其输入为VTKPolyData类型数据
vtkPolyData的成员函数GetNumberOfPonits()和GetNumberOfCell分别获取数据的点数和单元数目。
然后是定义一个图形数据的渲染管线,包括VTKPolyDataMapper()、vtkActor()、VTKReader()、vtkRenderWindow()和vtkRenderWindowInteractor()。这个渲染流程和图像渲染管线基本一致。需要注意的是,对于vtkPolyData类型数据的渲染管线、需要定义VTKPolyDataMapper对象,用于VTKPolydata图形数据以显示图像时数据到渲染图元的转换。

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);


#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);

	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;
}

3.运行截图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 。单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值