从VTK User's Guide上面找到更深入的介绍:
构成VTK的有两种对象模型:
① 图形对象模型(the Graphics Models)
②可视化对象模型(the Visualization Models)
下面分别介绍:
一、图形对象模型
图形模型包含下列核心对象(这不是无穷对象列表只是我们常用到的):
vtkActor, vtkActor2D, vtkVolume--vtkProp和/或vtkProp3D的子类
vtkLight--灯光
vtkCamera--镜头,照相机
vtkProperty, vtkProperty2D--
vtkMapper, vtkMapper2D--vtkAbstractMapper的子类
vtkTransform--
vtkLookupTable, vtkColorTransferFunction--vtkScalarsToColors的子类
vtkRender
vtkRenderWindow
vtkRenderWindowInteractor
可以通过对上述对象的组合形成场景(Scene)。
Props代表我们在场景中“看见”的东西(在3D中(有一个4*4的变换矩阵)被定位和操作的Props就是vtkProp3D,例如vtkActor就是vtkProp3D的一个具体的子类。如果我们要进行的是体绘制,这个子类就是vtkVolume。在2D中,Props用来定位和表示2D数据(即图像)的类就是是vtkActor2D),Props不直接表示几何形状,它借助Mappers对象,Mapper负责表达数据。Props也借助于一个属性对象(Property ),属性对象控制着Props的外观(颜色、漫射光、反射光效果;绘制外观:线框或面片等)。Actors和Volumes(通过超类vtkProp3D)还有一个内部变换对象(vtkTransform),这个对象封装了一个4*4矩阵,它依次控制着Prop的位置、朝向和尺度。
整个图形对象模型主要分为九类对象:
(1)渲染控制器: 定义与设备无关的坐标 计算方法, 创建绘制窗口;
(2)渲染窗口(RenderWindow):其基类为vtkRenderWindow, 管理显示设备上的窗口, 一个或多个绘制方 法可在渲染窗口上创建一个场景。渲染窗口是用户图形界面, 其中包括 了设置渲染窗口的大小, 产生立体显示效果等的方法, 一共控制控制两个缓存;
(3)渲染器(Renderer):基类为vtkRenderer,作用是管理光源、照相机和绘制对象等的位置、属性等; 提供 世界坐标系, 观察坐标系及显示坐标系之间的转换 。建立好一个Renderer 后将其加入RenderWindow中即可将场景显示出来;
(4)灯光( Light):VTK中的实现类为vtkLight, 用来表示和操作场景中的光线,光照仅用于3D,2D不需要光照。
(5)照相机(Camera): VTK实现类为vtkCamera, 相机对象在绘制过程中,控制如何将3D投影到2D,相机具有定位、定标和定向的几种方法。此外,相机还控制透视投影和立体视(若开启),2D图像不需要相机。
(6)角色(Actor):vtkActor代表渲染场景中的绘制对象实体 ,通过参数的调节可以设置角色的位置方向, 渲染 特性(Property),引用(renference),纹理影射(Texture)等属性,并可对Actor进行放缩。角色 的改变是通过一个4*4的变换矩阵实现的;
(7)属性(Property):实现类为vtkProperty。要使三维 物 体具有真实感, 必须说明几何物体的一些特性,例如 光照特性(泛光,漫反射,镜面反射,边缘颜色),反射强度,物体的灰度,物体的绘制样式(点, 线框, 表面) ,着色模式( flat, Gouraud, Phong)等;VTK 中正是通过属性模型来对其进行说明的;
(8)映射(Mapper):vtkMapper指定了渲染数据和图形库中基本图元之间的联系。VtkMapper的一些派生类通过LookupTable映射数据并控制图形库中相应Actor 图元的生成。(映射对象vtkMapper与查找表vtkLookUpTable相连,用来变换和绘制几何图形,映射提供可视化流水线与图形对象模型之间的接口)一个或多个Actor可以使用相同的Mapper。Mapper有多个参数对其进行控制, 如ScalarVisibility 标志 可以设置scalar的数据是否影响相关的Actor 的颜色; ScalarMode 可以控制Actor的颜 色是scalar point还是cell的值; 渲染方式可以通过 (ImmediateModeRenderingOn)和( ImmediateModeRenderingOff) 控制, 前一项表示立即渲染, 后一 项表示将渲染放于渲染列表中, 一般选择ImmediateModeRenderingOn方式进行, 选择后者将会占用较多的系统资源, 影响系统的性能;
(9)变换(Transform):vtkTransform是一个放置4*4变换矩阵的堆栈, 可对这一堆栈进行各种操作, 如:平 移, 缩放, 旋转等, 一般在栈的顶部进行。实现过程主要由渲染控制器创建渲染窗口,由渲染器在渲染窗口上绘制场景。场景包括绘制对象、映射、属性、变换、光 源、照相机等。VTK获取数据的方式是基于拉技术 , 即在管道的下一对象请 求数据时, 管道对象才进行数据集的相关处理, 因此可减小系统的运算负荷, 这对提 高系统实时性大有好处。
二、可视化模型(theVisualization Models)
用VTK进行可视化应用是非常方便的,它包括两个基本部分。首先,建立适当的目标图形来演示数据;其次, 建立一个数据流水线(data pipeline)来处理数据, 建立流水线(pipeline)就是将Source、Filters 和Mappers连接起来。
VTK的可视化模型主要包括两类对象:
(1)数据对象
(a)多边形数据(vtkPloyData):表示由顶点、直线、多边形即三角面片组成的几何体, 支持多种的原子类 型, 如vtkVertex,vtk-PloyVertex, vtkLine 等。
(b)结构点数据(vtkStructurePoint):是一包括表面形状及几何形状的几何体。
(c)非结构点数据(vtkUnStructurePoint):指定了几何体的外观;结构网格( vtkStructureGrid):指定了几何体的结构。
(d)非结构网格(vtkUnStructureGrid):可以为任意的cell 类型的组合。
(e)数据对象继承关系。
(2)过程对象
VTK 中定义的过程对象根据其pipeline主要包括了数据源(Source),过滤器(Filters),映射(Mappers),数据流水线(data pipeline),过程如图所示:
数据源(Source): vtkSource是所有数据源的基类, 其子类定义了许多数据源类型;
过滤器(Filters):vtkFilter 是各种Filter的基类, 从vtkSource中派生出来, 接收Source 中的数据, 进行种不同的Filter处理工作。Filters为VTK的主要部件, 由其基类派生出了许多子类, 实现了 图形学算法。将其封装起来, 用户只需要编写简单程序接口调用就可, 并可以通过改变 参数来达到想要的效果;
映射(Mappers) : vtkMapper 是所有Mappers 的基类, 从Filtes接受数据,并把其映射为图形库中的基本图
元。根据映射方式的不同, 有多个继承子类。
以上内容部分转自 http://hi.baidu.com/goywuonpkobdpvr/item/6f5424c5a8357f51ac00ef19
http://www.tuicool.com/articles/yMBbie
部分源于 VTK User's Guide
结合以上分类可以重新分析一下之前的范例1:
首先,可以知道vtkConeSource属于可视化模型中的数据对象,除vtkConeSource之外的,都是过程对象。
vtkActor是3D场景中应用的对象。我们的这个例子中的Props是一个三维圆锥,它的几何数据是由vtkConeSource经过vtkPolydataMapper提供的。而其属性我们没有设置,取默认情况。相机和光线也没有设置。然后将其放入渲染器中,最后在renderwindow中呈现出来。
(从上面这个分析看,我的逻辑性不是很好,理解的也不够深入。希望后面多了解VTk后,能够回来完善这个笔记。)