Rendering Engine(渲染引擎)负责数据的可视化表达。Visualization Pipeline(可视化管线)用于获取或创建数据,处理数据,把数据传递给 Writer(写入文件)或 Rendering Engine 进行显示
Visualization Pipeline 可视化管线
Visualization Pipeline 通过 Source——>Filter——>Mapper 再传递给 Rendering Engine 或者是 Writer 写入到文件(写入文件时无需在经过 Mapper 处理)
Source
Source 的来源有两个,一是用vtk自带的数据(如 vtkCylinderSource)demo,二是用从外部文件读取的数据(如 vtkStructuredPointsReader)demo。
Filter
顾名思义,即处理过滤原始数据,数据源既可以是 Source ,也可以从经 Filter 后的数据。例如 MC算法 就是一个 Filter ,用于从读取的数据中提取等值面
Mapper
Mapper 是 Visualization Pipeline 的终点,同时也是 Visualization Pipeline 连接到 Rendering Engine 的桥梁
三者区别
Visualization Pipeline的执行
使用SetInputConnection() 和 GetOutPort() 连接 Visualization Pipeline 后,数据并没有真正的在管线里流动,只有目标的 Update() 函数,数据才会流动,例如
auto reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName("test.jpg");
//只有调用了这个函数,reader才会真正读取图像
reader->Update();
但是通常,我们不显式调用 Update() ,因为在 Rendering Engine 最后,当调用 Render() 函数时,会一层一层的向下请求 Update 。但如果中间需要某些信息,则需显式的调用该方法
如果只是调用了 SetInputConnection() 和 GetOutPort() 函数,这样只是传递了数据,并没有建立管线,调用 Render() 函数时,管线并不会流通,所以需要调用 Update() 函数
Rendering Engine 渲染引擎
// 把Mapper的输出送入渲染引擎进行显示
auto actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// 渲染
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(1.0, 1.0, 1.0);
// 设置渲染窗口
auto renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
renWin->Render();
// 添加交互样式
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renWin);
auto style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
interactor->SetInteractorStyle(style);
interactor->Initialize();
interactor->Start();
这是一个代码片段,展示了渲染引擎渲染了 Mapper 处理过的数据,并显示到窗口中
actor——>render——>renderwindow——>interactor
每个 vtkRenderWindow 中可以有多个 vtkRender
vtkRenderWindowInteractor (窗口交互器)可以设定交互的样式
文档信息
- 本文作者:wzx
- 本文链接:https://masterwangzx.com/2018/10/24/render-and-pipeline/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)