vtk入门一(基础概念)

(前排声明,个人学习记录,有错误还请指正)

一、vtk是什么

可视化工具包(VTK)是用于操作和显示科学数据的开源软件。它配备了最先进的3D渲染工具,一套用于3D交互的小部件,以及广泛的2D绘图功能。

二、基本构成元素

  • vtkConeSource 生成几何数据并提供给 vtkPolyDataMapper

vtkConeSource 一个数据源类,用于生成圆锥形的几何体模型。它是VTK提供的一种简单的几何体生成器之一,用于在可视化和计算流程中创建基本的圆锥形状。数据源 你也可以换成别的,比如球,立方体,或者自定义的几何体。

  • vtkPolyDataMapper 将几何数据转换为可供 vtkActor 显示的格式。
  • vtkActor 包含了几何数据和其它可视化属性,是实际参与渲染的对象。

vtkActor可以与vtkMapper(如vtkPolyDataMapper)结合使用,从而将生成的几何数据(如球体、立方体、圆锥等)映射到渲染器上。vtkMapper负责将vtkPolyData对象中的几何信息映射为渲染器可以理解和显示的形式。

定义可视化属性:vtkActor可以设置和控制渲染时的可视化属性,如颜色、透明度、光照等。这些属性通过vtkProperty对象来管理和配置。

参与渲染流程:作为渲染管道的一部分,vtkActor将包含vtkMapper映射后的数据,并通过vtkRenderer最终渲染到vtkRenderWindow中。这意味着vtkActor是实际上参与形成最终渲染结果的组件之一。

  • vtkRenderer 管理和渲染多个 vtkActor 对象,并控制场景属性。

简单来书通过它控制,我们看到的背景,比如下图中的背景是黑色的

  • vtkRenderWindow 提供了一个显示场景的窗口。
  • vtkRenderWindowInteractor 处理用户输入,允许用户与渲染的场景进行交互。

下面这个可以通过,鼠标拖动来 不同视角观察。

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

#include <vtkConeSource.h>//源数据
#include <vtkPolyDataMapper.h>//数据映射
#include <vtkRenderer.h>//绘制器
#include <vtkRenderWindow.h>//绘制窗口
#include <vtkActor.h>//演员
#include <vtkCamera.h>//照相机
#include <vtkRenderWindowInteractor.h>//加入交互机制类

int main()
{
	//指针创建一个圆锥cone
	vtkConeSource* cone = vtkConeSource::New();
	cone->SetResolution(8);//圆锥的棱边数
	cone->SetHeight(3);//指定高度
	cone->SetRadius(1);//指定半径

	//实例化一个映射器coneMapper
	vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();
	coneMapper->SetInputConnection(cone->GetOutputPort());//源数据输出给映射器输入

	//创建一个演员对象coneActor
	vtkActor* coneActor = vtkActor::New();
	coneActor->SetMapper(coneMapper);//为演员指定mapper进行映射

	//搭建舞台  实例化对象renderer
	vtkRenderer* renderer = vtkRenderer::New();
	renderer->AddActor(coneActor);//将演员加入场景
	renderer->SetBackground(0.0, 0.0, 0.0);//设置场景背景颜色是(R,G,B)

	//实例化一个窗口对象renWin
	vtkRenderWindow* renWin = vtkRenderWindow::New();
	renWin->SetSize(500, 500);//设置窗口大小宽*高
	renWin->AddRenderer(renderer);//将场景renderer加入renWin窗口中

	//实例化一个交互对象
	vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::New();//交互对象加入renWin窗口中
	interactor->SetRenderWindow(renWin);

	renWin->Render();//绘制舞台上内容

	interactor->Initialize();//交互对象初始化
	interactor->Start();//开始交互事件

	//释放内存
	cone->Delete();
	coneActor->Delete();
	coneMapper->Delete();
	renderer->Delete();
	renWin->Delete();
	interactor->Delete();
	return 0;
}

#c++##vtk#
全部评论

相关推荐

头像
06-30 21:06
已编辑
四川大学 C++
#和牛牛一起刷题打卡#1.&nbsp;/etc/mtab:记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;/etc/fstab:记录了计算机上硬盘分区的相关信息。2.&nbsp;/etc/skel:可以存储用于创建用户目录的系统用户默认文件。3.&nbsp;一个程序的正文和数据分开的目的:可共享正文、可共享数据、可重入、可保护代码为只读。代码段和数据段分开有利于提高程序的局部性,现在CPU缓存一般设计为数据缓存和指令缓存分离,指令和数据分开存放可以提高CPU缓存命中率。共享指令,当系统运行多个程序的副本时,它们指令是一样的,因此内存只需保存一份程序的指令代码,每个副本进程的数据区是进程私有,可以节省内存。4.&nbsp;使用tail的-f选项可以方便的查阅正在改变的日志文件。5.&nbsp;swapon:用于启动交换分区或交换文件。6.&nbsp;/etc/ld.so.conf:此文件记录了编译时使用的动态库的路径,也就是加载so库的路径。7.&nbsp;ar:是一个用于创建静态库文件(.a文件)的工具,它可以向静态库中添加、删除、列出成员文件,也可以从.o文件创建静态库。8.&nbsp;touch&nbsp;/etc/nologin:禁止所有普通用户登录。9.&nbsp;~/bashrc:该文件包含专用于用户的bash&nbsp;shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。&nbsp;&nbsp;&nbsp;&nbsp;~/.bash_logout:当每次退出系统(退出bash&nbsp;shell)时,执行该文件。&nbsp;&nbsp;&nbsp;&nbsp;~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下它设置一些环境变量,执行~/.bashrc文件。10.&nbsp;使用alias命令可以将一个命令或一个命令序列与一个自定义的别名相关联。这样在使用该别名时,实际执行的是与之关联的命令序列。例如可以使用alias&nbsp;ll=&#39;ls&nbsp;-l&#39;(注意等号两边不能有空格)关联起来,这样每次输入ll时,实际上执行的事ls&nbsp;-l命令。
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务