Pipeline
可视化管线是指用于获取或创建数据、处理数据以及把数据写入文件或者把数据传递给渲染引擎进行显示,这样的一种结构在 VTK 里就称为可视化管线。数据对象(Data Object)、处理对象(Process Object)和数据流向(Direction of Data Flow)是可视化管线的三个基本要素。
从上图可以看到,我们从Source获取了多个输入数据源。它们各自通过不同的Filter进行处理后进行汇总,然后将结果送入mapper进行变换,再传入渲染引擎进行显示。
Source
数据源是Pipeline的入口,通常分为程序源对象(vtk中自带的各种Source)、读取源对象(从外部导入的数据)。Source是不接受输入的,但一定会有大于等于1的输出。
数据的读入往往通过vtk中提供的各种Reader来实现。
Filter
实际上指的是处理数据源的各种算法。Filter的输出既可以直接写入文件,也可以继续送往mapper进行变换后传入渲染引擎进行渲染。
Mapper
可视化管线的终点,将传入的数据变换为几何图元(点、线、多边形等)进行渲染。需要注意的是,后面还会遇到给显示物体着色之类的情况,但在mapper中,仅仅包含对于传入数据生成几何图元,并不包括操作其对应的属性数据。,对于属性数据的操作属于vtkActor的工作。
管线的执行
在vtk中,管线通过惰性赋值的方式执行。很好理解,只用当程序发出请求数据的命令时,管线才会执行一次。
- 用户手动调用某一部分的Update()函数时。
- 调用Render()函数。
当我们调用Render()函数后,Actor会逐层向上请求数据,从而让整个管线得以执行。