• 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

    设置光源。在场景中照亮绘制对象,可通过调用参数改变控制灯光的状态、照射角度、照射强度、颜色等,并支持点光源和平行光源。

    三、示例

    1. //数据源:锥
    2. vtkSmartPointer<vtkArrowSource> Arrow = vtkSmartPointer<vtkArrowSource>::New();
    3. //映射器
    4. vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    5. //映射器添加数据源
    6. mapper->SetInputConnection(Arrow->GetOutputPort());
    7. //演员
    8. vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    9. //设置演员的属性
    10. actor->GetProperty()->SetColor(0,1,1);
    11. //演员添加映射器
    12. actor->SetMapper(mapper);
    13. //渲染器
    14. vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    15. //渲染器添加演员
    16. renderer->AddActor(actor);
    17. //渲染窗口
    18. vtkNew<vtkGenericOpenGLRenderWindow> renwindow;
    19. //渲染窗口添加渲染器
    20. renwindow->AddRenderer(renderer);
    21. //添加渲染窗口
    22. ui->vtk_widget->SetRenderWindow(renwindow.Get());

    参考文章:

    VTK 学习笔记_vtk光照模型-CSDN博客

    vtk渲染_vtkrenderwindow_小卡kaka的博客-CSDN博客

    VTK 基础(一) — 常用控件介绍及实现圆锥体绘制_wx61e8fd3af30f8的技术博客_51CTO博客

  • 相关阅读:
    Linux 命令:PS(进程状态)
    HarmonyOS元服务实现今天吃什么
    海外多家权威媒体热议波场TRON:为互联网去中心化奠定基础
    使用LEFT JOIN 统计左右存在的数据
    Redis学习2——String数据类型的操作
    leetcode 474. Ones and Zeroes 一和零(中等)
    JS基础知识总结(四)
    【机器学习项目实战10例】(五):基于随机森林的假新闻检测项目
    58NoSQL之Redis配置与优化
    统一配置中心Config、Bus组件的使用以及 SpringCloud 微服务工具集总结
  • 原文地址:https://blog.csdn.net/m0_67254672/article/details/133923699