CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
第四章 The Basics (VTK使用基础)
yefeng2005
一.主要内容:
VTK 是由 Will Schroeder 等创立的 Kitware Inc. 的开放源码产品。Kitware 提供关于VTK 的技术支持和各种服务产品,包括教科书和用户指南:The Visualization Toolkit An Object-Oriented Approach To 3D Graphics, 3rd edition 和 The Visualization Toolkit User's Guide 。两本书的内容各有侧重,教科书主要介绍可视化的各种算法以及 VTK 中的数据结构,而用户指南强调软件的使用方法。本章主要简单介绍VTK的使用基础,让用户了解VTK的使用方式。
D 章节内容:
1.1 创建简单模型
VTK的主要的作用有:读取数据,产生数据,滤波处理,描绘图形和交互操作。其中,我们有两种基本的方法来获得数据:数据存贮在文件中,我们就将其读到系统中;通过一些算法或者数学方式来产生的数据。(读取文件数据,自行生成数据)
Source Objects:在可视化通道中进行初始化处理的对象。
Procedural (Source) Object:产生数据的对象(可产生球,立方体,锥体等图形) Reader (source) object:读取数据的对象 1.1.1 Procedural Source Object(源程序对象)
VTK/Examples/Rendering/Tcl/Clinder.tcl代码解释说明。可以通过这个代码来了解一些基本的图形和
可视化的概念。(生成一个8边柱体)
1.1.2 Reader Source Object
TK/Examples/Rendering/Tcl/CADPart.tcl 代码解释说明。(载入一个STL格式的文件)
1.2 使用VTK人机交互接口
VTK有很多方法来使你与可视化的数据进行交互:(但都是以鼠标键盘为输入)
1.2.1 键盘J/T 图形旋转风格,是鼠标左键按下就旋转还是要鼠标拖动才旋转
1.2.2 键盘C/A 控制camera 和actor的风格.camera风格中,鼠标事件影响摄像机位置和焦点,而在Actor
风格中鼠标事件只作用于Actor.(按A后图像旋转时其外部框架不动)
1.2.3 鼠标左键,控制图形旋转
1.2.4 鼠标中键,(滚轮)控制图形移动
1.2.5 鼠标右键,控制图形放缩(滚轮的滚动也可以缩放图形) 1.2.6 键盘E 退出exit
1.2.7 键盘R 将图像图形恢复到初始位置 1.2.8 键盘P 绘制出所选图形的区域势力范围 1.2.9 键盘U 可做为用户自定义的交互接口
1.2.10 键盘W 只显示图形的轮廓线,或者说显示图形的网状结构 1.2.11 键盘S 与键盘W相反恢复到正常显示状态 交互风格
VTK中自定义的一些与交互相关的函数.在VTK中用vtkInteractorStyleTrackballCamera:: SetInteractorStyle()这个方法来改变设置交互风格. 有关交互风格定义的类如下:
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 1 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
#include \#include \#include \
#include \#include \#include \#include \以上类都是vtkInteractorStyle的子类 使用方式如下:
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); iren->SetInteractorStyle(style);
1.3 对数据的filter处理(滤波/过滤)
Filter是一种数据处理机制,有一个或多个输入,有一个输出.其目的是对图形图像数据进行处理,以得到我们期望中的数据.
如专门对图像数据进行处理的类有:
#include \#include \
#include \#include \#include \
#include \#include \#include \#include \
#include \#include \ #include \
#include \ #include \ #include \#include \ #include \#include \#include \#include \ #include \#include \
以上的类大都可以用作对二维图像的图像处理.也可以做为三维图像volume的图像处理.
vtkShrinkPolyData的作用是将图形中的所有三角面片缩小一定的比例,但整个图形的大小没有变,这就使得图形中出现龟裂.
有关VTK管道流滤波的原理请看第10章,有关具体的管道流类的介绍使用方法请看第14章.
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 2 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
1.4对摄像机camera的控制
Camera在VTK中可以理解成视点,即观察图形的位置,或称虚拟照像机来实现3D视图
It is convenient to create an initial view of the data. The FocalPoint(视点) and Position form a vector(矢量) direction. Later on (ResetCamera() method) this vector is used to position the camera to look at the data in this direction.
对camera的操作方法如下:
vtkCamera *aCamera = vtkCamera::New(); aCamera->SetViewUp (0, 0, -1);//设视角位置 aCamera->SetPosition (0, 1, 0);//设观察对象位置 aCamera->SetFocalPoint (0, 0, 0);//设焦点
aCamera->ComputeViewPlaneNormal();//自动
aRenderer->SetActiveCamera(aCamera);
关于camera还有两个重要的方法:
Azimuth(150)//表示camera的视点位置沿顺时针旋转150度角 Elevation(60)// 表示camera的视点位置沿向上的方面旋转60度角 这两个方法使摄像机在一个球面中移动。
1.5 灯光控制
灯光在VTK中并不是十分必要的,当编程时,如果不设灯光的话会是正常显示图形,但如果设置了
光,那么出现的情况是阴影的出现,灯光照不到的地方将会出现明显的阴影。在我们的医学三维图像处理的编程过程中还没有发现有用Light的必要.
灯光的设置比较简单,只要设定三个方法就可: SetColor()灯光着色 ,默认为白光
SetFocalPoint()灯光照向的位置,焦点 SetPosition() 光源位置
通常,所定义的光源为方向光源,光源位置和焦点决定光的方向. 程序范例:
vtkLight *light = vtkLight::New();
light->SetFocalPoint(1.875,0.6125,0); light->SetPosition(0.875,1.6125,1); light->SetColor(1,0,0); ren1->AddLight(light);
1.6 Controlling 3D Props(控制3D图形)
1.6.1设定三维图形在空间中的位置,初始时的旋转角度,起始点
vtkProp3D类中的方法(vtkProp3D是vtkActor的父类). 在VTK中用vtkProp3D用控制要绘制图形的位置,位置的移动,图形的旋转,设置三维世界的标量.
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 3 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
在对图形旋转时主要是对XYZ三个轴方向分别进行旋转,是先Y轴,然后X轴,最后Z轴
1.6.2 actor(演员)
Actor用来在一场景中表现一个可视化实体,也可以称之为3D图形的描绘实现.主要用作对图形的绘制,如一些简单的球形,锥体.
vtkActor is used to represent an entity in a rendering scene. It inherits functions related to the actors position, and orientation from vtkProp.The actor also has scaling and maintains a reference to the defining geometry (i.e., the mapper), rendering properties, and possibly a texture map.
其使用方式如下例
vtkPolyDataMapper *Mapper = vtkPolyDataMapper::New(); Mapper->SetInput(outline->GetOutput()); vtkActor *Actor = vtkActor::New(); Actor->SetMapper(Mapper); aren->AddActor(Actor);
Actor自身还包含一些属性,用来表示对显示对像的设置.属性有其自己的类vtkPropertyProp 如: Actor->GetProperty()->SetColor(1,1,1);//(1,1,1)表白色,表示将绘制对象的着色设为白色. 对Actor的其他属性包括:透明度,镜像系数,扩散度等. 属性值还包括扩散颜色,反射颜色,外部颜色.
在VTK编程中也可以直接定一个属性类对象,然后将Actor与这个属性类对象相关连,如:
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 4 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
对透明度进行设置的图形如下所显:
1.6.3 Assembilies组合
在现实生活中,通常的物体都是复杂图形,我们可以用简单图形来组成复杂图形,在VTK中将一些描绘简单图形的actor组装起来,合并成一个actor,在绘制过程中,只要添加到一个assembily类中就可以显示多个图形. 1.7
纹理的使用(using texture)
可以将一个二维图像文件(如.bmp格式文件)贴在一个三维图形上做为其纹理.如下图:
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 5 页 共 10 页