VTK 用户指南
版本 4.0
William J. Schroeder
1998-2000
第一部分 VTK 介绍
第 1 章 欢迎
1.1 机构-----------------------------------------------------------------------------------------------8
1.2 怎样使用 VTK----------------------------------------------------------------------------------8
1.3 附加资源-----------------------------------------------------------------------------------------8
第 2 章 安装
2.1 概述-----------------------------------------------------------------------------------------------9
2.2 安装 VTK 到 Windows9x/NT/ME/2000/XP------------------------------------------------9
二进制安装-------------------------------------------------------------------------------------9
源代码安装-------------------------------------------------------------------------------------9
2.3 安装 VTK 到 Unix 操作系统
源代码安装------------------------------------------------------------------------------------10
运行 CMake------------------------------------------------------------------------------------11
编译源代码
建立 VTK 多平台
安装 VTK
第 3 章 系统概述
3.1 系统设计---------------------------------------------------------------------------------------12
图形模型--------------------------------------------------------------------------------------13
可视化模型-----------------------------------------------------------------------------------15
3.2 创建一个应用---------------------------------------------------------------------------------19
用户方法、对象和命令--------------------------------------------------------------------19
Tcl----------------------------------------------------------------------------------------------19
C++---------------------------------------------------------------------------------------------20
Java
Phthon
Visual Basic/COM/ActiveX
3.3 在两种语言间转换
第二部分 通过例子学习 VTK
第 4 章 基础
4.1 创建 1 个简单的模型-------------------------------------------------------------------------24
程序化源对象---------------------------------------------------------------------------------24
读取源对象------------------------------------------------------------------------------------26
4.2 使用 VTK 交互器-----------------------------------------------------------------------------27
vtk 绘制窗口交互器
1
交互风格
4.3 滤波数据---------------------------------------------------------------------------------------29
4.4 控制相机---------------------------------------------------------------------------------------30
安装相机
简单操作方法
控制视角方向
透视与正交视
保存与恢复相机状态
4.5 控制光线---------------------------------------------------------------------------------------32
位置光
4.6 控制 3D 道具-----------------------------------------------------------------------------------32
指定 vtk 道具 3D 位置
演员
演员的详细级
装配
体
vtk 装载 3D 道具
4.7 作用纹理---------------------------------------------------------------------------------------37
4.8 拾取---------------------------------------------------------------------------------------------38
vtk 装配路线
例子
4.9 vtk 坐标和坐标系---------------------------------------------------------------------------40
4.10 控制 vtk 演员 2D----------------------------------------------------------------------------41
4.11 注释--------------------------------------------------------------------------------------------41
2D 注释
3D 注释和 vtk 跟踪
4.12 特殊绘图类-----------------------------------------------------------------------------------44
尺度棒
X-Y 绘制
边界盒轴
标记数据
4.13 变换数据--------------------------------------------------------------------------------------48
高级变换
第 5 章 可视化技术
5.1 可视化 VTK 数据集 vtkDataSet(和子类) -------------------------------------------------50
使用数据属性进行工作
颜色映射
轮廓化
浮雕化
流线图
流线表面
剪裁
融合数据
附加数据
2
用另外一个尺度给等值面赋颜色
抽取单元格子集
抽取单元格作为多边形数据
5.2 可视化多边形数据---------------------------------------------------------------------------67
手工产生多边形数据
产生表面当量
十比一抽取
平滑网格
粘贴数据
产生纹理坐标
5.3 可视化结构网格-----------------------------------------------------------------------------74
手工产生结构化网格
抽取计算平面
结构网格子样化
5.4 可视化直线网格-----------------------------------------------------------------------------76
手工产生 VTK 直线网格
抽取计算平面
5.5 可视化非结构网格--------------------------------------------------------------------------77
手工产生 VTK 非结构网格
抽取部分网格
非结构网格轮廓化
第 6 章 可视化图像和体数据
6.1 VTK 结构化点的历史表示-----------------------------------------------------------------80
6.2 手工产生 VTK 图像数据-------------------------------------------------------------------80
6.3 抽取图像数据子样--------------------------------------------------------------------------81
6.4 基于尺度值的弯曲--------------------------------------------------------------------------83
6.5 图像显示--------------------------------------------------------------------------------------83
图像观察者
图像演员
6.6 图像源-----------------------------------------------------------------------------------------85
2D 帆布图像源
3D 椭圆体图像源
高斯图像源
网格图像源
噪声图像源
正弦曲线源
6.7 图像处理--------------------------------------------------------------------------------------88
梯度化
高斯平滑
直方图
图像逻辑
重新切片
6.8 体绘制-----------------------------------------------------------------------------------------92
一个简单的例子
3
为什么会有多种体绘制技术?
产生一个 VTK 体
使用片层化函数
使用颜色变换函数
在一个体属性中控制颜色和透明度
在一个体属性中控制阴影
产生一个体映射
裁剪一个体
粘贴一个体
对一个体应用 3D 纹理
控制标准编码
体素光线计算
2D 纹理映射
VolumePro 绘制硬件
速度和精确度交替使用
使用 vtkLODProp3D 改善性能
可行性/局限性技术
第 7 章 建立模型
7.1 隐模型----------------------------------------------------------------------------------------114
定义隐函数
对隐函数进行抽样
7.2 挤压-------------------------------------------------------------------------------------------117
7.3 构建表面-------------------------------------------------------------------------------------119
Delaunay 三角形化
高斯油彩
无组织点产生表面
第三部分 VTK 研发者指南
第 8 章 数据接口和其他
8.1 读入器----------------------------------------------------------------------------------------130
多边形数据读入器
图像和体素读入器
数据集读入器
结构化网格读入器
线性网格读入器
非结构化网格读入器
8.2 写入器----------------------------------------------------------------------------------------131
多边形数据读入器
图像和体素读入器
结构化网格读入器
线性网格读入器
非结构化网格读入器
8.3 输入者----------------------------------------------------------------------------------------132
4
8.4 输出者----------------------------------------------------------------------------------------132
8.5 创建硬拷贝----------------------------------------------------------------------------------132
保存图像
保存大(高分辨率)图像
8.6 产生动画(使用样条) -----------------------------------------------------------------------134
8.7 使用现场数据工作--------------------------------------------------------------------------136
第 9 章 贡献编码
9.1 编码补偿--------------------------------------------------------------------------------------141
为 VTK 贡献编码的条件
编码风格
如何贡献编码
9.2 标准方法: 创建和消除对象---------------------------------------------------------------142
9.3 拷贝对象和受保护的方法------------------------------------------------------------------143
9.4 写一个 VTK 类: 综述-----------------------------------------------------------------------144
找到一个相似类
识别一个超类
单个类 Per.h 文件
必需的方法
文档编码
使用 SetGet 宏
向 VTK 中添加类
9.5 对象工厂--------------------------------------------------------------------------------------145
综述
如何写一个工厂
如何安装一个工厂
例子工厂
第 10 章 流水线执行管理
10.1 执行过程--------------------------------------------------------------------------------------151
概述和术语
更新信息通道
传播更新扩展通道
触发异步更新通道
更新数据通道
10.2 使用流---------------------------------------------------------------------------------------162
第 11 章 VTK 数据对象接口
11.1 数据组---------------------------------------------------------------------------------------166
方法
11.2 数据集---------------------------------------------------------------------------------------169
11.3 VTK 数据集接口---------------------------------------------------------------------------170
方法
例子
5
11.4 VTK 图像数据接口-----------------------------------------------------------------------174
方法
例子
11.5 VTK 点集接口-----------------------------------------------------------------------------176
方法
例子
11.6 VTK 结构化网格接口---------------------------------------------------------------------178
方法
例子
11.7 VTK 线性网格接口-----------------------------------------------------------------------178
方法
例子
11.8 VTK 多边形数据接口---------------------------------------------------------------------179
方法
例子
11.9 VTK 非结构化网格接口-----------------------------------------------------------------184
方法
例子
11.10 单元格接口(VTK 单元格子类) ------------------------------------------------------185
11.11 其他接口----------------------------------------------------------------------------------187
点
单元格数组
单元格类型
单元格连接
11.12 现场和属性数据接口------------------------------------------------------------------193
现场数据方法
数据集属性方法
第 12 章 如何写一个过程方法
12.1 概述----------------------------------------------------------------------------------------196
永远不要修改输入数据
参考计数数据
使用 Debug 宏
回收/删除截入的内在
修改时间
过程事件和异常终止执行
12.2 如何写一个绘图过滤器---------------------------------------------------------------199
概述
简单过滤器
复杂过滤器和流水线执行
抽取绘图过滤器
程序过滤器
重载流水执行方法
12.3 如何写一个图像过滤器---------------------------------------------------------------210
6
实现一个图像过滤器
第 13 章 用窗口系统集成
13.1 绘制窗口交互风格--------------------------------------------------------------------------216
13.2 GUI 交互的总指导线------------------------------------------------------------------------217
13.3 X Window, Xt, and Motif--------------------------------------------------------------------221
13.4 MS Windows/Microsoft Foundation Classes---------------------------------------------226
13.5 Tcl/Tk-------------------------------------------------------------------------------------------227
13.6 Java
第 14 章 编码资源
14.1 对象图表--------------------------------------------------------------------------------------230
基础
单元格
数据集
流水线
源
过滤器
映射器
图形
体绘制
成像
OpenGL 绘制器
拾取
变换塔形结构
14.2 过滤器总结-----------------------------------------------------------------------------------237
可视化过滤器
映射者对象
演员对象
14.3 VTK 文件格式--------------------------------------------------------------------------------244
二进制文件
数据集属性格式
例子
第 15 章 光盘
15.1 源代码
15.2 例子代码
15.3 Window 9x/NT/ME/2000/XP 预编译二进制
15.4 数据
15.5 文档
15.6 退化测试图像
15.7 Kitware 应用
7
第 1 章
欢迎
欢迎来到 VTK 可视工具箱用户指南,这本书已经对 VTK4.0 以后的版本进行了更新,
VTK 是一个开放的、面向对象的软件系统,主要功能是计算机图形学、可视化和图像处理。
尽管它庞大和复杂,但它是为易学易用设计的,一旦你学会了基本的面向对象的设计和实现
方法。
VTK 是个大系统,因此,不可能将所有对象和方法的文档在这本书中体现,本书将介
绍 VTK 一些重要的概念,引导你尽快和高效的学习。一旦你掌握了这些基础,我们建议你
从 VTK 用户社区里获得许多资源(附加资源见第 4 页)。
VTK 是个源代码开放的系统,这意味着有数十个或数百个像你一样的研发者和用户为
系统作出了贡献。如果你认为 VTK 是个有用的工具,我们鼓励你贡献程序修正、算法、思
想或应用返回给 VTK 社区(见 204 页)。你也可支持商业公司研发或加进新的特性和工具。
1.1 结构
本手册分为三部分,每一部分又分为若干独立章节。第一部分是 VTK 总论,包括如何
在你机器上安装 VTK。这部分包括安装预编译库和可执行程序,或者从源代码编译软件。
还包括系统设计概述和如何创建 C++、Tcl、Java 和 Python 语言程序的应用。第二部分是用
户指南的核心,数十个例子来展示重要的系统特性。第三部分是 VTK 高级用户。第三部分
解释如何创建自己的类、扩展系统、同各种窗口和 GUI 系统交互。第十四章包括简化对象
图表,当你读写自己数据时,它提供 VTK 对象之间关系、过滤器列表、VTK 文件模式描述。
第十五章介绍随书光盘内容,最后是随机访问用户指南的方便索引。
1.2 如何使用 VTK
有两类 VTK 用户,一类是类开发者,他们用 C++来创建类,另一类是应用开发者,他
们使用 C++类库来建立组合应用程序。类开发者必须是 C++高手,如何想扩展或修改 VTK
类,你必有对它的内部结构和设计非常熟悉(见第三部分)。应用程序开发者不必会使用 C++,
由于编译过的 C++类库已经被封装起来,使用的解释型语言 Tcl、Python、Visual Basic、Java。
作为应用开发者你必须知道 VTK 对象的外部接口和它们之间的关系。
使用 VTK 的关键是要熟悉它的对象模板和混合它们的方式。如何你是一个新用户,首
先以安装软件开始。如果你是一个类开发者,你要安装源代码,然后编译它们。应用开发者
只需要预编译二进制文件和执行文件,我们建议你通过例子学习系统(应用开发者),通过
源代码来学习系统(类开发者)。从第三章开始阅读,它给出了一些系统关键概念,然后复
习第二章的例子。你也许希望运行许多例子,它们源代码位于目录 VTK/Examples 中(详见
描述在子目录的 VTK/Examples/README.txt 文件中)。还有数百个试验在源程序中,例如
在 VTK/Graphics/Testing/Tcl 和 VTK/Graphics/Testing/Cxx,多数是无文档的脚本。然而,它
们对理解类在 VTK 中是如何组织的,非常有用。
1.3 附加资源
为得到 VTK 工具箱更多的信息,我们推荐下列资源:
· The Visualization Toolkit An Object-Oriented Approach To 3D Graphics, 3rd Edition Will
Schroeder, Ken Martin, Bill Lorensen 520 pages, printed in full color includes CD-ROM with
software/data updated for VTK version 4.2. 《可视化工具箱 3D 图像面向对象方法(第三版)》,
这本书深入详细地论述 VTK 中的算法、数据结构和系统问题。
· 网站 http://public.kitware.com/包含引擎,指向许多其它资源,如在线手册、问题解答、
VTK 用户邮件列表,特别是 Doxygen 手册面相当精彩。尽管这些内容都可以从光盘获得,
也可从在线页 http://public.kitware.com/VTK/doc/nightly/html 获得。
· 许多 VTK 用户和开发者也在维护自己网站,值得推荐的一个是 Sebastien Barre’s 与 VTK
8