pcl+vtk(六)vtk简单介绍、渲染流程、简单示例

一、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博客

猜你喜欢

转载自blog.csdn.net/m0_67254672/article/details/133923699