VTK学习之一(基本介绍、一个简单的VTK例子)

这篇主要讲一个VTK的简单例子,加深自己对VTK的理解。

前记

       学习vtk就是觉得pcl中封装的PCLVisualizer功能有限。学习vtk主要是看《VTK图形图像开发进阶》张晓东、罗火灵编著这本书,还有就是水灵的视频。水灵的视频更加老一点,不是很影响对vtk的基本理解,我是看了一遍书之后再看水灵的视频,还是看视频理解来的更加深刻。

       水灵用的版本是vtk5.6版本,东灵用的是vtk6.0版本,我用的版本是vtk8.0。

VTK介绍

VTK全称Visualization Toolkit ,即可视化工具包,它是开源、跨平台、可自由获取、支持并行处理的图形应用函数库。

VTK中主要分为可视化模型和图形模型,数据流方向如下图1所示

                                                                                      图1

输入数据(Source),对数据进行滤波(Filter)操作,然后对数据进行映射(vtkMapper),将其封装成一个对象(vtkActor),再将这个对象添加到渲染场景(vtkRenderer)中,再利用渲染窗口(vtkRenderWindow)中进行渲染展示。

一个故事理解VTK

首先我们先列举出VTK中绘制或者渲染一个场景需要用到的基本对象:vtkMapper、vtkActor、vtkRenderer、vtkRenderWindow、vtkRenderWindowInteractor、vtkLight、vtkCamera、vtkProperty、vtkInteractorStyle...

我们可以想象自己去看一场舞台剧演出,我们坐在台下,前面是舞台,舞台上有各种各样的灯光和许多的演员,这些演员在表演前肯定会穿衣打扮自己,在中途还会与我们有一定的互动。

   

                                                                                        图2

从上面图2可以看出,现在整个剧院就相当于一个vtk中渲染窗口vtkRenderWindow,舞台就是渲染场景vtkRenderer,演员就是一个个对象vtkActor,他们不同的容貌、服装等这些属性统称为vtkProperty,我们观众和演员的互动就是vtkRenderWindowInteractor,我们送花、拥抱、握手等这些就是交互的风格vtkInteractorStyle,舞台上的灯光就是vtkLight,每个观众的眼睛就是vtkCamera,由于我们每个观众看到的东西都是唯一的所以vtkCamera只有一个,但是灯光vtkLight却可以是多个的。

 

一个简单的VTK例子

 

下面这个例子是参照《VTK图形图像开发进阶》中第一章给出的一个例子写出来的。

//***********************************
//说明:一个简单的VTK例子
//时间:2020.08.10
//作者:BOO
//********************************
#include<vtkSmartPointer.h>

#include<vtkConeSource.h>
#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkInteractorStyleTrackballCamera.h>

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType)

int main()
{
	//圆锥模型
	vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();
	cone->SetHeight(3.0);
	cone->SetRadius(1.0);
	cone->SetResolution(10);

	//映射器
	vtkSmartPointer<vtkPolyDataMapper> coneMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	coneMapper->SetInputConnection(cone->GetOutputPort());

	//对象
	vtkSmartPointer<vtkActor> coneActor = vtkSmartPointer<vtkActor>::New();
	coneActor->SetMapper(coneMapper);

	//渲染
	vtkSmartPointer<vtkRenderer>renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(coneActor);
	renderer->SetBackground(0.0, 1.0, 1.0);

	//渲染窗口
	vtkSmartPointer<vtkRenderWindow>renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(renderer);
	renWin->SetSize(600, 400);

	//交互
	vtkSmartPointer<vtkRenderWindowInteractor>renderInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderInteractor->SetRenderWindow(renWin);

	//交互风格
	vtkSmartPointer<vtkInteractorStyleTrackballCamera>style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
	renderInteractor->SetInteractorStyle(style);

	renderInteractor->Initialize();
	renderInteractor->Start();

	return 0;

}

运行结果图:

代码解释

目前vtk中所有的指针都是利用vtkSmartPointer智能指针来进行管理的,所以实例化一个对象需要用规定格式声明即可,例如实例化一个圆锥:

 vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();

代码中后面的部分都是对应于上面的流程进行编写的,应该是很简单的,看懂没什么问题。

错误提醒

如果报错添加这几行:

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType)

参考

《VTK图形图像开发进阶》

study VTK Together 一起学习VTK教程--水灵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值