VTK教程之二:可视化管线的执行

来源:互联网 发布:怎么把商品放到淘宝网店里去 编辑:程序博客网 时间:2024/05/18 17:00
VTK可视化流水线主要将数据对象和过程对象组成,这两种对象相互之间可以用多种方式连接在一起,构成可视化管线的拓扑结构,在构建可视化管线拓扑结构时,必须要保证管线上游的对象输出的数据类型和其下游对象接收的数据类型保持一致,如一个源对象输出的是一个多边形数据类型,而和其连接的过滤器对象只能接收规则格网类型的数据,那么可视化管线就不能正确地执行,所以,在构建可视化管线时,一定要注意对象输入、输出之间数据类型的匹配性。

构建好可视化管线后,构成可视化管线的各个对象对数据的处理过程,成为可视化管线的执行,当管线中的过程对象或数据发生改变时,可视化管线都要重新执行,为了保证管线的执行效率,管线在执行过程中必须保持处理对象的同步,VTK采用隐式执行的方式保持同步,隐式执行的过程如下图所示:



隐式执行包含两个互逆的过程,在图中可以看到Execute()方法的执行是从左到右,UpDate()方法的执行是从右到左。

1、Execute()方法的执行

当可视化管线中的对象创建的时间发生改变时,表示对象已经更新,这时Execute()方法被调用,执行过程为从源对象通过过滤器对象到映射器对象。

2、UpDate()方法的执行

当图形系统请求绘制场景时,发出绘制请求(Render()),UpDate()方法被调用,请求管线中的每个对象更新数据,执行过程为映射器对象、过滤器对象、源对象依次调用Update()方法更新数据。

管线的隐式执行过程:

假设一个可视化管线由源对象、过滤器对象、映射器对象组成,其执行过程如下:

1)用户发出绘制场景的请求。

2)图形系统的角色(Actor)对象给映射器对象发送场景将要绘制的信息,管线开始执行。

3)映射器对象调用Update()方法,然后过滤器对象、源对象依次调用Update()方法。

4)源对象调用Update()方法后,开始比较当前被修改的时间和最后执行的时间,如果当前被修改的时间比最后被执行的时间更新,说明源对象最近被修改过,还未执行,于是调用Execute()方法开始执行流水线。

5)过滤器对象及映射器对象开始比较它们的修改时间和最后的执行时间,根据比较的结果决定是否调用Execute()方法。

可视化管线在执行过程中,提供了循环反馈机制、类型检查机制和内存均衡等,下面分别对这几种机制进行说明:

1) 循环反馈机制

在可视化流水线中引入反馈循环机制,用于将过程对象的输出数据变成输入数据反馈给过程对象,作为过程对象的输入数据,如下图所示,Integrate过滤器对初始输入的数据处理后,再将输出的数据反馈给Probe过滤器。

 



2)类型检查机制

类型指处理对象所能处理的数据类型,各种处理对象所能接收、处理和输出的数据类型是各不相同的,所以,在建立归管线的连接时,要明确所连接的处理对象所能接收和输出的数据类型,在VTK中,对输入数据类型的控制提供了两种方法,一种是建立单一数据类型处理的过程对象,只能处理单一的数据类型,另一种是建立数据类型检查机制,对数据类型进行检查,只有处理数据类型相互兼容的过程对象才能相互连接。

转自:http://lzchenheng.blog.163.com/blog/static/838335362010718102554655/