一、可视化管线
二、数据源
1.两类数据源
2.生成数据
//vtkConeSource 是 VTK 库中的一个类,用于生成一个圆锥体的几何形状。
#include <vtkConeSource.h>
// 1.generate data(生成模型)
//一、vtkSmartPointer<vtkConeSource> cone: 这里声明了一个名为 cone 的智能指针,其类型为 vtkSmartPointer<vtkConeSource>。
//智能指针是一种在对象超出范围时自动释放的指针,有助于管理内存和资源(不用delete)。
//二、vtkSmartPointer<vtkConeSource>::New(): 这是一个调用静态成员函数 New() 的方式,用于在堆上创建一个新的 vtkConeSource 实例。
//在 C++ 中,vtkSmartPointer<vtkConeSource>::New() 是用于创建 VTK 对象的常见用法。
//::New():这是一个 VTK 类的静态成员函数,用于在堆上创建一个新的对象实例。在 VTK 中,许多类都具有名为 New() 的静态成员函数,用于创建新的对象。
//New() 函数返回的是一个原始指针,然后被智能指针包装,以实现自动内存管理。
vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();
3.读取数据
//添加读取文件的头文件
#include <vtkSTLReader.h>
//从文件中读取数据模型
vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName("C:/VTKPlatform/Data/42400-IDGH.stl");
三、映射器(mapper)
继承架构:
映射器的作用是把抽象的数据映射为图形元素
vtkPolyDataMapper:在三维空间中用结点和边描述的数据
#include <vtkPolyDataMapper.h>
// 2.mapper
//vtkPolyDataMapper 是 VTK 中的一个类,用于将几何数据映射到渲染器以进行可视化。
//使用 vtkPolyDataMapper 将几何数据源生成的几何信息映射到可供渲染的格式。这个过程中会生成绘制所需的顶点、索引等信息。
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
四、角色(prop)
继承架构:
#include <vtkActor.h>
// 3.actor
//演员(actor)是 VTK 中用于表示可渲染对象的类,它们与映射器相关联。
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
五、渲染器(renderer)
作用:实现渲染相关的操作
#include <vtkRenderer.h>
//4.renderer
//vtkRenderer 是 VTK 中的一个类,用于创建渲染器对象,它负责渲染可视化结果并提供了控制视图和相机等功能。
//这段代码创建了一个 vtkSmartPointer 智能指针,指向一个新创建的 vtkRenderer 对象。
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
//然后,我们在 renderer 对象上设置了背景颜色。
renderer->SetBackground(.3, .6, .3);
六、变量的连接
// 5.connect them
mapper->SetInputConnection(reader->GetOutputPort());
actor->SetMapper(mapper);
renderer->AddActor(actor);
数据源的输出(读取数据)连接到映射器(mapper)的输入
映射器(mapper)连接角色(actor)
角色(actor)连接渲染器(renderer)
七、渲染器添加到渲染窗口
_pVTKWidget->renderWindow()->AddRenderer(renderer);
渲染窗口(_pVTKWidger)是一个VTKRenderWindow类
八、(补充)过滤器(filter)
过滤器是非必须的
继承架构:
负责缩放的过滤器:
//設置过滤器(filter)
#include <vtkShrinkPolyData.h>
//若包含filter
shrink->SetInputConnection(cone->GetOutputPort());
mapper->SetInputConnection(shrink->GetOutputPort());
actor->SetMapper(mapper);
renderer->AddActor(actor);
![](https://img-blog.csdnimg.cn/6003a3bfd8ce47a1b5dabd160bdd6798.png)
![](https://img-blog.csdnimg.cn/2664c29aa1d94ca794550985b39cabe0.png)
可以看见圆锥的每个面都被缩小了
九、总结