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