一、vtk简单介绍
Vtk(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。
二、vtk渲染流程
流程图如下:
1.vtkSource 数据源
各个类型的图像原始数据。
2.vtkFilter 数据过滤器
对原始数据进行一些操作,转化成可以直接应用算法模块的形式。
3.vtkMapper 数据映射器
将不同的数据类型转换为图形数据,将 vtkFilter 处理后的应用数据映射为几何数据,相当于为原始数据和图像数据之间定义了接口。
vtkGPUVolumeRayCastMapper是一种用于体绘制(Volume Rendering)的mapper,可以将一组体数据(例如CT或MRI扫描数据)转换为渲染后的体绘制图像。该mapper基于GPU的体绘制技术,可以快速生成高质量的渲染图像。因此,它适用于渲染大规模体数据和实时渲染的情况。
vtkPolyDataMapper是一种用于多边形数据(PolyData)的mapper,可以将各种形状的多边形数据(例如点云、网格、曲面等)转换为渲染后的图像。该mapper基于CPU,适用于小规模的多边形数据渲染。
因此,当需要渲染大规模体数据或进行实时渲染时,应该选择vtkGPUVolumeRayCastMapper。而当需要渲染小规模多边形数据时,应该选择vtkPolyDataMapper。体数据和多边形数据是两种不同的数据类型,一般来说,如果你的数据是由像素或体素组成的三维图像,例如CT或MRI扫描数据,那么这就是体数据。而多边形数据则是由三角形、四边形等构成的表面网格数据,例如通过三维建模软件生成的模型。一般来说,体数据的扩展名可能是nii、dcm、mhd等,而多边形数据的扩展名可能是obj、stl、ply等。
4.vtkActor(演员)
执行渲染mapper的对象,用来表示渲染场景下的一个特定物体。
在VTK中,Actor是指将图形数据(例如三维模型、点云等)和其属性(例如颜色、透明度、材质等)结合起来,作为一个可渲染的单元。Actor可以看作是一个“演员”,将图形数据呈现在屏幕上。一个Actor可以包含多个Mapper,但只能有一个属性集合(vtkProperty)。
通过vtkActor,可以设置Actor的位置、旋转、缩放等变换属性,以及设置Actor的可见性、选择性、用户定义的数据等。Actor还可以使用vtkActor2D进行平面图像的显示。
在VTK中,Actor通常与Renderer一起使用,即在Renderer中添加Actor,并将Renderer添加到RenderWindow中进行显示。
5.vtkRender 渲染器
将vtkActor进行加入,用于渲染图像。渲染器控制场景物体渲染过程,渲染过程则是将物体的几何结构、光和摄像机视角转化到图片中。
6.vtkRenderWindow 渲染窗口
将vtkRender进行加入,用于显示成像的窗口。渲染窗口是用户图形界面。
7.vtkInteractor 交互器
用于获取渲染窗口上发生的鼠标,键盘事件,提供了独立于平台的与渲染窗口进行交互的机制
8.vtkProperty
修饰vtkActor的属性。
9.vtkCamer
定义视角,焦距,及场景的视觉属性。
10.vtkLight
设置光源。在场景中照亮绘制对象,可通过调用参数改变控制灯光的状态、照射角度、照射强度、颜色等,并支持点光源和平行光源。
三、示例
//数据源:锥
vtkSmartPointer<vtkArrowSource> Arrow = vtkSmartPointer<vtkArrowSource>::New();
//映射器
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
//映射器添加数据源
mapper->SetInputConnection(Arrow->GetOutputPort());
//演员
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
//设置演员的属性
actor->GetProperty()->SetColor(0,1,1);
//演员添加映射器
actor->SetMapper(mapper);
//渲染器
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
//渲染器添加演员
renderer->AddActor(actor);
//渲染窗口
vtkNew<vtkGenericOpenGLRenderWindow> renwindow;
//渲染窗口添加渲染器
renwindow->AddRenderer(renderer);
//添加渲染窗口
ui->vtk_widget->SetRenderWindow(renwindow.Get());
参考文章:
VTK 学习笔记_vtk光照模型-CSDN博客
vtk渲染_vtkrenderwindow_小卡kaka的博客-CSDN博客
VTK 基础(一) — 常用控件介绍及实现圆锥体绘制_wx61e8fd3af30f8的技术博客_51CTO博客