VTK使用基础
更新时间:2024-02-02 04:17:01 阅读量: 教育文库 文档下载
- vtk推荐度:
- 相关推荐
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 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
上图的程序实现为: vtkBYUReader *model_reader=vtkBYUReader::New();
model_reader->SetGeometryFileName(\载入三维图形数据 vtkPolyDataNormals *model_normals=vtkPolyDataNormals::New(); model_normals->SetInput(model_reader->GetOutput());//法线设置 vtkTextureMapToCylinder *tmapper=vtkTextureMapToCylinder::New(); tmapper->SetInput(model_normals->GetOutput()); tmapper->PreventSeamOn(); vtkTransformTextureCoords *transform_texture=vtkTransformTextureCoords::New(); transform_texture->SetInput(tmapper->GetOutput());//纹理处理 vtkDataSetMapper *mapper=vtkDataSetMapper::New(); mapper->SetInput(transform_texture->GetOutput()); vtkJPEGReader *texture_reader=vtkJPEGReader::New();//载入图像文件数据 texture_reader->SetFileName(\ vtkTexture *texture=vtkTexture::New();
texture->SetInputConnection(texture_reader->GetOutputPort()); texture->InterpolateOn(); vtkActor *actor=vtkActor::New();
actor->SetMapper(mapper);//图形数据显示
actor->SetTexture(texture);//将图像映射到图形数据上
1.8用 VTK 进行 CT 片三维重构
VTK 作为一种通用的可视化类库,在科学和工程界有着广泛的应用。其中一种重要而常见的应用就是在医学领域,比如著名的“可视化人”项目,就有 VTK 的应用。实际上,VTK 在医学方面的应用是是 VTK 比较强调的,在它提供的例程应用中,就有专门的医学目录。学习它们,并应用于我们的项目中,是一条合适的途径。
比如,如果要做一个 3D 的医学影像系统,其中重要的一个环节就是三维重构,这也是在全膝置换手术中需要的。所以,用 VTK 进行 CT 片的三维重构,就是一个合适的应用的例子。
利用 VTK 做 CT 片的三维重构,从算法和数据结构来看,就是一个读取数据问题和一个图形显示问题。 对于我们手里的 CT 片,因为它们符合 DICOM 3.0 标准,所以对它们的读取还是相对容易的。VTK 已经实现了这类数据的读取,vtkImageSource类的很多子类都可以完成这种工作,如vtkImageReader 类或者 vtkVolumeReader 等。这样我们编程的时候只要指定必须的参数,就可以实现对单张 CT 片乃至 CT 片序列的读
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 6 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
取了。根据 VTK 的数据管道,原始数据读取入了以后,就可以使用各种各种过滤器进行数据转换,在这个例子里,即进行表面抽取、影射,然后就可以绘制了。因为是三维重建,所以还应该加入交互器,以便可以在绘制窗口里进行交互。
关于重建算法,对于 CT 片这种三维规则数据场,可以采取成熟、基本的算法来进行三维重建,比如 MarchingCubes 算法。
1.9 Picking
Picking用来选取数据以及演员actors,或者询问隐藏的数据属性.
vtkPicker is used to select instances of vtkProp3D by shooting a ray into a graphics window and intersecting with the actor's bounding box. The ray is defined from a point defined in window (or pixel) coordinates, and a point located from the camera's position.
vtkPicker may return more than one vtkProp3D, since more than one bounding box may be intersected. vtkPicker returns the list of props that were hit, the pick coordinates in world and untransformed mapper space, and the prop (vtkProp3D) and mapper that are \to the camera. The closest prop is the one whose center point (i.e., center of bounding box) projected on the ray is closest to the camera.
1.10 VTK
中的坐标系统
VTK支持多种坐标系统,它用类vtkCoordinate 来控制对不同的坐标系统进行设置.
1.10.1对坐标系统的设置如下:( The coordinate systems in vtk are as follows:)
DISPLAY - x-y pixel values in window NORMALIZED DISPLAY - x-y (0,1) normalized values VIEWPORT - x-y pixel values in viewport
NORMALIZED VIEWPORT - x-y (0,1) normalized value in viewport
VIEW - x-y-z (-1,1) values in camera coordinates. (z is depth) WORLD - x-y-z global coordinate values USERDEFINED - x-y-z in User defined space
1.10.2样例程序如下:
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 7 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
vtkCoordinate *normCoords= vtkCoordinate::New();
normCoords->SetCoordinateSystemToNormalizedViewport(); vtkPolyDataMapper2D *mapper= vtkPolyDataMapper2D::New(); mapper->SetInput(*&^*^*);
mappe->SetTransformCoordinate(normCoords); 1.10.3对坐标设置的方法如下:
void vtkCoordinate::SetCoordinateSystemToDisplay();
void vtkCoordinate::SetCoordinateSystemToNormalizedDisplay(); void vtkCoordinate::SetCoordinateSystemToViewport();
void vtkCoordinate::SetCoordinateSystemToNormalizedViewport(); void vtkCoordinate::SetCoordinateSystemToView(); void vtkCoordinate::SetCoordinateSystemToWorld(); 1.11 vtkActor2D
vtkActor2D和vtkActor很相似,只不过它是对二维图形的操作.
vtkActor2D is similar to vtkActor, but it is made to be used with two dimensional images and annotation. 使用范例如下:
vtkPolyData *selectRect= vtkPolyData::New(); selectRect->SetPoints (pts); selectRect ->SetLines (rect);
vtkPolyDataMapper2D *rectMapper= vtkPolyDataMapper2D::New(); rectMapper ->SetInput (selectRect);
vtkActor2D *rectActor= vtkActor2D::New(); rectActor ->SetMapper (rectMapper);
1.12 在图形窗口上添加注释
在VTK中有两种方法为所生成的图形添加注释:
(1)2D注释,将文字放在二维的图形窗口上,文字不会因为用户的操作而变化
(2)3D注释,将文字添加在所生成的三维图形上,或者将文字直接以三维图形的方式显示. 1.12.1 2D Annotation(二维注释)
程序范例如下: vtkTextMapper *textActor=vtkTextMapper::New(); textActor->SetInput (\is a sphere\所要显示的注释文字 vtkScaledTextActor *mmm=vtkScaledTextActor::New(); mmm->SetMapper(textActor); mmm->SetDisplayPosition(90, 50 );//设定注释位置 ren1->AddActor2D(mmm);//注释文字的绘制
在vtkTextMapper中,我们可以对文字的字体,大小,内容等属性做出更改,在vtkScaledTextActor中,我们可以控制注释的位置,以及颜色.
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 8 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
1.12.2 3D Annotation and vtkFollower
三维注释是用vtkVectorText 来创建注释内容文字. vtkFollower是绘制三维注释的一种方式. 程序范例如下: vtkVectorText atext atext SetText \vtkPolyDataMapper textMapper textMapper SetInputConnection [atext GetOutputPort] vtkFollower textActor textActor SetMapper textMapper textActor SetScale 0.2 0.2 0.2 textActor AddPosition 0 -0.1 0 ren1 AddActor textActor 程序运行效果如下:
其字体随着球的运动而运动.
4.13 三维数据的的转动(Transforming Data)
在VTK中,对三维数据的转动可以用vtkTransformFilter这个类来实现.
vtkTransformFilter is a filter to transform point coordinates, and associated point normals and vectors. Other point data is passed through the filter.
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 9 页 共 10 页
CadCaeCamPlm专业门户网站 联系HuangSteve@163.com
An alternative method of transformation is to use vtkActor's methods to scale, rotate, and translate objects. The difference between the two methods is that vtkActor's transformation simply effects where objects are rendered (via the graphics pipeline), whereas vtkTransformFilter actually modifies point coordinates in the
visualization pipeline. This is necessary for some objects (e.g., vtkProbeFilter) that require point coordinates as input.
另一个对三维图形的转动实现的类为vtkTransformPolyDataFilter.该类主要用于对多边形数据的操作
vtkTransformPolyDataFilter is a filter to transform point coordinates and associated point and cell normals and vectors. Other point and cell data is passed through the filter unchanged. This filter is specialized for polygonal data.
使用范例如下:
vtkTransform *transL1= vtkTransform::New(); transL1->Translate(3.7, 0.0 ,28.37); transL1->Scale( 5 ,5 ,5); transL1->RotateY( 90);
vtkTransformPolyDataFilter *tf= vtkTransformPolyDataFilter::New(); tf->SetInputConnection (line->GetOutputPort()); tf-> SetTransform( transL1);
www.CadCaeCam.com/Forum/index.htm
CadCaeCamPlm专业门户网站收集整理, 版权属于原作者 联系HuangSteve@163.com
第 10 页 共 10 页
正在阅读:
VTK使用基础02-02
2017中考考前动员会讲话稿03-12
红会一矿作业规程、专项安全技术措施的编制、审批及复审制度12-25
2015操作系统原理作业10-24
群的阶与群中元素的阶的关系03-21
圣周默想(十一):你们得力在乎平静安稳04-12
韵沟翎翔鹅卵石的价格05-10
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 基础
- 使用
- VTK
- 廉洁从业教育网上测试复习题
- 实验十二 复杂地形中的选址
- 04.(简)量子物理 第四章 激光(2003) - 图文
- 组态王读取modbusTCP设备浮点数时的SWAPF寄存器设置
- 设备强制性条文
- 铁路建设工程监理规划编制指南和《铁路建设工程监理实施细则编制指南》的通知(铁建389号)
- 湖北省荆门市2011-2012学年高一下学期期末考试英语试题
- 东奥培训全部题目四(6001-8000)
- 歌曲《凤阳花鼓》
- 农业生态学(系统管理)综合应用答案
- 安徽省农业标准化示范区管理办法
- 中国杨木系列行业市场调查研究报告(目录) - 图文
- 土地上市工作流程
- 苏住建价〔2016〕3号营改增调整后的措施项目费费率(适用于苏州市)(表4-8)
- 扣件模板方案2017.10.25
- 对联练习题
- LabWindowsCVI中调用Excel
- 谈五步拳教学的一点体会
- 中国移动 短信接口 CMPP3.0协议
- 公司员工退出岗位管理办法