vtk学习记录(三)——初识vtkRenderer

2020-05-16 16:01:00来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

vtk学习记录(三)——初识vtkRenderer

目录

  • 前言
  • vtkRenderer
  • 引入vtk窗口
  • 小结

前言

一场疫情打乱了好多人的节奏,我也一样,一不留神半年都快过去了,这期间虽说一直在鼓捣东西吧,不过确实是没啥实质性的进展,索性就继续把vtk的使用来完善下吧。

vtkRenderer

vtk的基类,也就是所有类基本继承于vtkObjectBase,Renderer也是一样,看下图,其实看源码挺好的,可以学习学习别人的思想,借鉴下充实自己。
vtkRenderer

vtkRenderer个人理解就是个窗口渲染器,也是vtk的核心,没了这玩意儿你没法去操作你的vtkActor,你的vtkInteractorStyle也没有挂载区域,具体的介绍也不多说,看资料看文档吧(我也不会-,-||)。

引入vtk窗口

在上一篇,工程到了能正常运行的地步,但是没有引入vtk相关的,接下来就是把vtk窗口放置到自己的qt工程的时间了。
添加窗口

之前的配置中已经提到这个QVTKWidget,也就是vtk的窗口,至于怎么拖拖到哪看你自己,不会的可以先鼓捣下单纯的qt吧。

保存之后,我们先来运行程序看下效果,如果不出意外的话会跟我这显示的一样。
异常

我们来看下输出的信息。
输出

vtk的新版本不再是QVTKWidget,也就是说这玩意儿没了,一番找资料后发现,哦,原来是改名字了,新版本改成了QVTKOpenGLWidget,更改ui文件后我们再来运行程序。

运行

可以看到图中的vtkOutputWindow,这个窗口是vtk内置的错误信息弹框,也就是说有异常的时候回给你输出信息提示,但其实你在输出一样能看到只是没有这个直观而已。

回头看这个异常信息,也就是说没有重写vtkxxx,没有绑定事件机制什么的,我们在头文件加上下面这几句。

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

错误是解决了,不过这个窗口黑压压的也不知道是干啥的,不用急我们来一段Demo。

	vtkSmartPointer<vtkConeSource> coneSource =
		vtkSmartPointer<vtkConeSource>::New();
	coneSource->Update();

	vtkSmartPointer<vtkPolyData> polyData =
		vtkSmartPointer<vtkPolyData>::New();
	polyData = coneSource->GetOutput();

	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(0.3, 0.3, 0.3);

	ui.qvtkWidget->GetRenderWindow()->AddRenderer(render);

	vtkSmartPointer<vtkRenderWindowInteractor> rwi =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	rwi->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());
	rwi->Initialize();

接下来简单介绍下上面这段的意思,首先我们要先了解下opengl,大致知道模型从点到面到成像的过程,opengl教程地址。

首先我们创建一个Source,也就是点,面数据,通过DataMapper整理映射,然后Actor是模型的实体,至于Renderer就不多说了,RenderWindowInteractor是事件交互集合,也就是默认的交互事件。

引入对应的头文件之后,运行项目,不出意外的话就是下面的效果。

运行

小结

真是不看不知道,竟然大半年都快过去了,这个学习记录好久也没更新了,但是在这段时间鼓捣的东西确实不少,回头整理整理,下一步先整理下vtkCamera这个相机的玩意儿。


原文链接:https://www.cnblogs.com/AprilBlank/p/12900773.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C++仿函数

下一篇:C++和C#的对比