1.创建一个简单的VTK程序(VTK版本Hello World)

这个专栏是用于记录我在学习VTK过程中的一些心得体会。参考的资料主要有以下三个:

1. 张晓东 罗火灵《VTK图形图像开发进阶》
2. https://examples.vtk.org/site/
3. 沈子恒 《VTK 三维数据渲染进阶》

遇到的一个大问题就是由于版本更新,这些资料中很多代码无法正常运行,需要进行一定的修改,所以这个专栏会记录下来我修改后的程序代码,以便于我之后温习。也希望能给和我有同样困扰的小伙伴们一些帮助。

我使用的版本:VTK9 + VS2022

下载好VTK并配置完环境,这时候我们就会希望找一个类似于hello world的测试代码来检测一下VTK是否安装成功并且可以正常使用。

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
///
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"

int main()
{
	//Visualize Pipeline : Source->Mapper->Actor
		//
	vtkCylinderSource * cylinder = vtkCylinderSource::New();
	cylinder->SetResolution(10);

	vtkPolyDataMapper* cylinderMapper = vtkPolyDataMapper::New();
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

	vtkActor* cylinderActor = vtkActor::New();
	cylinderActor->SetMapper(cylinderMapper);
	///Actor property
	cylinderActor->GetProperty()->SetColor(1.0, 0.32, 0.27);
	cylinderActor->RotateX(30.0);
	cylinderActor->RotateY(-45);

	//Render Engine:Renderer->RenderWindow->RenderWindowInteractor
	//
	vtkRenderer* cylinderRenderer = vtkRenderer::New();
	vtkRenderWindow* cylinderRenderWindow = vtkRenderWindow::New();
	vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
	cylinderRenderWindow->AddRenderer(cylinderRenderer);
	iren->SetRenderWindow(cylinderRenderWindow);

	//Visualize Pipeline -> Render Engine
	//
	cylinderRenderer->AddActor(cylinderActor);
	cylinderRenderer->SetBackground(0.1, 0.2, 0.4); // render background property
	cylinderRenderWindow->SetSize(400, 400);  //render window size

	//Camera
	// The renderer renders into the
		// render window. The render window interactor captures mouse events
		// and will perform appropriate camera or actor manipulation
		// depending on the nature of the events.
	cylinderRenderer->ResetCamera();
	cylinderRenderer->GetActiveCamera()->Zoom(1.5);  //focus

	//Window Hold On
	iren->Start();

	//Clear Memory
	iren->Delete();
	cylinderRenderWindow->Delete();
	cylinderRenderer->Delete();
	cylinderActor->Delete();
	cylinderMapper->Delete();
	cylinder->Delete();
	return 0;
}

运行程序,我们就可以得到一个十棱柱啦:

如果能够成功运行出这个程序,也就证明VTK安装成功啦。这个程序也是一个很典型的VTK程序,在后续的文章中还会反复进行研究。

我们现在先通过这个程序了解一下常用的VTK类。

从这个程序包含的头文件

#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"

我们可以看到如下的一些类:

(1)vtkCylinderSource:生成一个中心在渲染场景原点的柱体。

(2)vtkPolyDataMapper:用于渲染多边形几何数据,将输入的数据转化为几何图元(点,线,多边形)进行渲染。

(3)vtkActor:演员者类,作为渲染场景中数据的可视化表达。

(4)vtkProperty:vtkActor的不同属性。

(5)vtkRenderer:负责管理场景的渲染过程。

(6)vtkRenderWindow:将操作系统与VTK渲染引擎连接在一起。

(7)vtkRenderWindowInteractor:提供平台独立的响应鼠标、键盘和时钟事件的交互机制。

(8)vtkCamera:相机,用于定义观察者的位置、焦点和其它相关属性。

其实从这个简易的小程序我们也可以看出,VTK程序设计是很流水线的,第一步是Visualize Pipeline(Source -> Mapper -> Actor)以及Actor Property,第二步是Render Engine(Renderer -> RenderWindow -> RenderWindowInteractor),第三步是将Actor装进Renderer,同时对Renderer进行背景设置,对RenderWindow的尺寸进行设置。

值得注意的是,在使用New()定义变量时要在其生命周期结束前使用Delete()函数释放内存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值