VTK 可视化工具包

21.04.2008 

http://zh.wikipedia.org/wiki/VTK
http://en.wikipedia.org/wiki/VTK
Vtk(visualization toolkit)是一个开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,650多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。Vtk几乎可以在任何一个基于Unix的平台上操作,以及Windows 95/98/NT/2000/XP。 

http://www.vtk.org/Wiki/VTK
http://www.vtk.org/Wiki/VTK_FAQ#General_information_and_availability

 

VTK数据类型基础

分为两种:vtk是基于C++的库,自然是面向对象的库了~ 对象类型有两种
图形模型对象(the Graphics Models)
可视化模型对象(the Visualization Models)

整个图形模型主要分为九类对象:
(1)渲染控制器: 定义与设备无关的坐标计算方法, 创建绘制窗口;
(2)渲染窗口(RenderWindow):其基类为vtkRenderWindow, 管理显示设备上的窗口, 一个或多个绘制方 法可在渲染窗口上创建一个场景。渲染窗口是用户图形界面, 其中包括 了设置渲染窗口的大小, 产生立体显示效果等的方法, 一共控制控制两个缓存;
(3)渲染器(Renderer):基类为vtkRenderer,作用是管理光源、照相机和绘制对象等的位置、属性等; 提供 世界坐标系, 观察坐标系及显示坐标系之间的转换。建立好一个Renderer 后将其加入RenderWindow中即可将场景显示出来;
(4)灯光( Light):VTK中的实现类为vtkLight,
(5)照相机(Camera): VTK实现类为vtkCamera,
(6)角色(Actor):vtkActor代表渲染场景中的绘制对象实体,通过参数的调节可以设置角色的位置方向, 渲染 特性(Property),引用(renference),纹理影射(Texture)等属性,并可对Actor进行放缩。角色 的改变是通过一个4*4的变换矩阵实现的;
(7)属性(Property):实现类为vtkProperty。要使三维物体具有真实感, 必须说明几何物体的一些特性,例如 光照特性(泛光,漫反射,镜面反射,边缘颜色),反射强度,物体的灰度,物体的绘制样式(点, 线框, 表面) ,着色模式( flat, Gouraud, Phong)等;VTK 中正是通过属性模型来对其进行说明的;
(8)映射(Mapper):vtkMapper指定了渲染数据和图形库中基本图元之间的联系。VtkMapper的一些派生
       类通过LookupTable映射数据并控制图形库中相应Actor 图元的生成。一个或多个Act        or可以使用相同的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://cherokee.ncsa.uiuc.edu/~semeraro/PPT/VTK_TUTORIAL/v3_document.htm 
http://www.cs.utah.edu/classes/cs5630/vtk/start/
http://www.cs.uic.edu/~jbell/CS526/Tutorial/Tutorial.html
http://noodle.med.yale.edu/~papad/seminar/
http://vtkblog.blogspot.com/
http://public.kitware.com/VTK/doc/nightly/html/pages.html
http://barre.nom.fr/vtk/links-apps.html
http://www.bioengineering-research.com/vtk/vtkit.htm
http://www.cs.utah.edu/classes/cs6630/vtkInfo/


C3P论坛:
http://www.cadcaecam.com/forum/index.php


应用: