VTK培训教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VTK 培训教程
VTK 数据种类 11
VTK 教程之一可视化管线 14
VTK 教程之二可视化管线的履行 19
VTK 教程之三数据集 21
VTK 教程之四单元和点集 22
VTK 教程之五数据集的种类和数据集的属性数据25
VTK 教程之六建立数据集的例子程序28
VTK 教程之七可视化基础算法 -概括 31
VTK 教程之八可视化基础算法 -颜色映照32
VTK 教程之九可视化基础算法 -二维轮廓线(等值线)提取37 VTK 教程之十可视化基础算法 -三维轮廓面(等值面)提取44 VTK 教程之十一可视化基础算法 -方向线47
VTK 教程之十二可视化基础算法 -几何体变形50
VTK 教程之十三可视化基础算法 -位移图53
VTK 教程之十四可视化基础算法 -用隐函数建立几何体57
VTK 培训教程之十五可视化基础算法 -用隐函数提取数据集中的数据66
VTK 培训教程之十六可视化基础算法 -用隐函数可视化随机或失散运动的物体69
VTK(Visualization Toolkit) 安装和配置
没有找到 vc6.0 或 vc8.0 下的安装版,假如用vc7.0 话有现成的安装版本,只好自己着手编译了一下
安装版的配置环境 (VC6,Windows)
1.一定要下载的东西, VC6 差不多装好为前提:
vtk-5.0.4-win32.exe 安装程序 的 Download
vtk-5.0.4.zip 源程序
vtkdata-5.0.4.zip 数据
2.安装 vtk-5.0.4-win32.exe 在 D:\Program Files\VTK 5.0,解压 vtk-5.0.4.zip 到
到
3.用 cmake 编译到 D:\Program Files\VTK 5.0\bin 下,(这一步花了我很多时辰,每次 cmake 编译到必定量就死掉,不理解什么缘由,
编译了不下 10 次终于成功 )
4.参数设置,几个重点参数要注意;
vtk_use_guisupport,翻开它,才能选vtk_use_mfc,再 configure;
vtk_data_root: 目的是告诉 cmake,vtk 需要的数据都在哪里,我们的
数据在 D:\Program Files\VTK
build_examples: 的确是询咨询能否编译 vtk 中的例子,我第一次的时候选上了,结果编译了 2 个小时的例子还没编译完,所以我此后选了 off 。
build_shared_libs: 假如设置为 off ,就只会生成 lib 文件,用于开发确信是够了。
假如设置为 on,将会多生成 dll 文件,这些 dll 需要拷到 windo
ws/system名当今。
建议选 On,
5.cmake 中选 ok,在 bin 文件下,编译 dsw 文件就行,我大概花 6 分钟。
6.测试:这时新建一个 project, win32 console applicatio n, an empty project, 生成后给 source files 加一个,把下边的代码放到里面去。
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
int main()
{
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight( 3.0 );
cone->SetRadius( 1.0 );
cone->SetResolution( 10 );
vtkPolyDataMapper *coneMapper = vtkPolyDataMappe r::New();
coneMapper->SetInputConnection( cone->GetOutputPort () );
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper( coneMapper );
vtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->SetBackground( 0.1, 0.2, 0.4 );
vtkRenderWindow *renWin = vtkRenderWindow::New ();
renWin->AddRenderer( ren1 );
renWin->SetSize( 300, 300 );
int i;
for (i = 0; i < 360; ++i)
{
renWin->Render();
ren1->GetActiveCamera()->Azimuth( i );
}
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return 0;
}
环境路径设置,那个比较重要:
1).改正 Project setting->C/C++ ->Category->Preprocessor->Additional i nclude directories:
D:\Program Files\VTK 5.0\vtk-5.0.4\Graphics,D:\Program Files\VTK 5. 0\vtk-5.0.4\Filtering,D:\Program Files\VTK 5.0\vtk-5.0.4\Common,D:\Progra m Files\VTK 5.0\bin,D:\Program Files\VTK 5.0\vtk-5.0.4\Rendering
2). 改正 Project setting->Link->Input->Object/library modules:
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib vtkComm on.lib vtkDICOMParser.lib vtkexoIIc.lib vtkexpat.lib vtkFiltering.lib vtkfreet ype.lib vtkftgl.lib vtkGenericFiltering.lib vtkGraphics.lib vtkHybrid.lib vtkI
3) Project setting> Link -> Category: Input -> Additional library pat
h:
D:\Program Files\VTK 5.0\bin\bin\Debug
VTK编程简介(转载)
0怎样利用文档
VTK是由Will Schroeder 等创办的Kitware Inc. 的开放源码产品。
K itware 供给对于 VTK的技术支持和各样服务产品,包含教科书和用户指
南: The Visualization Toolkit An Object-Oriented Approach To 3D Graphi cs, 3rd edition 和 The Visualization Toolkit User's Guide 。
两本书的内容
各有重视,教科书重要介绍可视化的各样算法以及VTK中的数据结构,
而用户指南重申软件的使用方法。
可以依照使用过程中碰到的不一样咨询题
参照两本书中的相应章节。
编程中对详细的类、函数等的使用可以参照电
子版的手册。
编程中碰到的咨询题,可以在VTK的maillist上提出,一样都会有解答。
1 编译 VTK库
1.1 预备源代码
1.2 用 CMake 产生详细平台下的工程文件
VTK 是用C++ 语言开发的平台没关的图形库。
为了使互相关系的V TK 库代码能在不一样平台(如Windows 和Unix )和不一样编译器(如Visu al Studio 6.0 和 Borland)下方便使用, Kitware 开发了 CMake 这一变换
工具。
比如使用 CMake,可以为 Windows 平台下的 Visual Studio 6.0 产生相应的工程文件( .dsp 或 .dsw 文件),今后便可以在 Visual Studio 的集成开发环境 (IDE) 下进行编译连结了。
CMake 供给一个用户界面,用户可以定制某些变量,此中比较重要的
是BUILD_SHARED_LIBS ,依照它的选择可以生成 VTK 的静态库或许动向链接库。
假如编译成静态库,那么在开发应用程序时要将相应库代码加
入可履行程序;假如是动向库,则可履行程序与动向链接库是分别的。
用动
向库的利处是可以减小主程序的体积,弊端是可履行程序不可以独立运转。
不过在有些情况下,因为某些专利算法在商业用途里只好受权使用,所以
VTK供给的部分代码只好以动向链接库的方式使用,所以应当熟习编译动态链接库的方法。
其余较常有的重要变量有 VTK_USE_PATENTED 、VT
K_USE_HYBRID 等,编译时使它们翻开开关,便可以编译出相应的库以
便往后使用了。
图1
1.3 编译库
以下以Windows 平台下的Visual Studio 6.0 编译环境为例来讲明使
用方法,不再申明。
翻开用 CMake 产生的 .dsw 文件,选择工程种类进行编译。
工程种类重要分两类: Release 和 Debug ,开发过程中相同用 Debug ,到刊行时再用Release ,所以在此用 Debug 即可。
编译整个工程产生所有库,那个
过程所需时辰特意长。
编译达成后,会在 CMake 里面指定的目标名目内(如vtkbin )产生编译出的库文件(缺省在 vtkbin/bin/Debug 名目内)。
2 在 Visual Studio 6.0 开发环境下使用VTK库
VTK库编译好了此后,便可以在Visual Studio 开发环境下使用VT K 库了。
使用VTK 库第一要设置头文件和库文件的路径,以便使用VTK 库的程序在编译和链接的时候可以搜寻到。
头文件的地点即源代码的各个
子名目,里面包含了大批的.h 文件。
将其路径加入到
的Tools -> Options -> Directories 内,如图 2。
注意除了源码的各个子名目外,还要加上一个 vtkConfigure.h 文件的路径,它在 CMake 产生的目
标名目内。
库文件的设置与此近似,也在 Directories 页面进行,其路径是前述编译产生库文件的名目(如 vtkbin/bin/Debug )。
这样设置好路径此后,使用VTK 库的程序便可以正确地编译和链接了。
对于使用动向链接库的
程序来讲,此刻还不可以运转编译出来的可履行程序(.exe),还需要一步,即把 VTK的动向链接库文件所在路径加入操作系统的环境变量PATH ,或斩钉截铁将这些库文件拷贝到系统名目。
图2
3 VTK库编程特色
VTK库是用面向对象的C++ 语言写成的,因为重要开发者有着十数
年波及可视化系统的领会,所以VTK拥有特意合理的模型和结构。
VTK的编程风格在教科书的附录A,包含命名规范、术语定义、各种对象的用途讲明等。
值得注意的,比如它的对象工厂(Object Factory)看法。
在 VTK 里,是用 <class>::New() 的方式来初始化对象的,而不是用 C++ 中的new 来新建对象,对象工厂不单可以做到代码与设施没关,并且经过引用计数( reference counting),可以使程序清楚简洁,不简单发生内存泄露或崩溃
的咨询题。
VTK 中实现了数百个类及其方法,它们之间简化的继承和关系关系可
以从教科书附录A.3 的图中看到。
熟习不一样的类的用途和它们之间的关系,对编程十分有益。
对开发者来讲,怎样扩大那个类库是重要的,教科书的附录 A.4 介绍
了那个咨询题,而用户指南的开发者指南部分有一章来讲详细的做法。
4 经过例子学习VTK看法及编程
要用 VTK库进行可视化编程第一要对可视化要有必定的看法和基
础。
除了一般的可视化教科书之外,VTK供给的教科书籍身就特意好。
V
TK 源程序包的 Example 名目包含了一系列例子,它们都有详细的说明。
一步
步学习这些例子,可以特意简单理解得 VTK 波及的可视化看法和 V TK 编程的
相同特色。
学习这些例子第一要成功编译运转它们。
那个步骤跟编译库近似,也需要先用CMake 工具生成Visual Studio 的工程文件,而后编译;而要保证程序能正确运转,还得保证VTK 库文件在环境变量的 PATH 内。
初学者应当从 Tutorial 名目内的 Step x 例子下手,它们从最简单的VTK 程序开始,一步步地增添看法,演示了各样可视化看法。
注意例子里
的说明,以第一个程序( Step1 的 Cone 程序)为例,看一下源程序:源程序:
//
//This example creates a polygonal model of a cone, and then rende rs it to
// the screen. It will rotate the cone 360 degrees and then exit. The basic
// setup of source -> mapper -> actor -> renderer -> renderwindow i s
//typical of most VTK programs.
//
//First include the required header files for the VTK classes we are using.
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h" #include
"vtkActor.h"
int main( int argc, char *argv[] )
{
//
// Next we create an instance of vtkConeSource and set some of it s
// properties. The instance of vtkConeSource "cone" is part of a
// visualization pipeline (it is a source process object); it produces data
//(output type is vtkPolyData) which other filters may process.
//
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight( 3.0 );
cone->SetRadius( 1.0 );
cone->SetResolution( 10 );
//
//In this example we terminate the pipeline with a mapper process object.
//(Intermediate filters such as vtkShrinkPolyData could be inserted in
// between the source and the mapper.) We create an instance of
// vtkPolyDataMapper to map the polygonal data into graphics prim itives. We
// connect the output of the cone souece to the input of this mapp er.
//
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInput( cone->GetOutput() );
程序段1
那个简单的例子是一个操控台下的程序,创立一个棱锥,在屏幕上绘制,旋转 360 度退后出。
程序虽简单,但差不多包含了数据源、映照器、
演员、绘制器、绘制窗口等看法,这些看法在VTK 编程中几乎差不多上
必然波及的。
经过那个例子,便可以对教科书里讲到的各样可视化看法(如相机、演员),编程模型(如管道)等有直观的认识了。
那个地址仅举那个最简单的例子,事实上,VTK 自带的例子顺序渐进,从简单的看法,到各样复杂的看法、算法和数据结构、 GUI 编程、直到详细的应用等,都做了特意好的例证。
联合教科书和例子,可以较快地理解得 VTK 的各个方面。
比如讲,假如要用VTK 在Win32 环境下编程,应当学习Example/ GUI/Win32 下的例程,假如要用 MFC 框架,那么可以参照此中的 vtkMF C 例程。
领会 VTK 库和 Win32 的关系、和 MFC 框架的关系,以便在
这些平台上开发自己的程序。
这需要对 VTK 和操作系统、编程环境自己有比较深入的认识,而这种认识对自行开发程序是十分必需的。
5 用 VTK进行CT片三维重构
VTK 作为一种通用的可视化类库,在科学和工程界有着宽泛的应用。
此中一种重要而常有的应用的确是在医学领域,比若有名的“可视化人”项目,就有 VTK 的应用。
本质上, VTK 在医学方面的应用是是 VTK 比较重
申的,在它供给的例程应用中,就有特意的医学名目。
学习它们,并应用于
我们的项目中,是一条适合的门路。
比如,假如要做一个3D 的医学影像系统,此中重要的一个环节的确
是三维重构,这也是在全膝置换手术中需要的。
所以,用VTK进行CT 片的三维重构,的确是一个适合的应用的例子。
利用 VTK做CT片的三维重构,从算法和数据结构来看,的确是一
个读取数据咨询题和一个图形显示咨询题。
对于我们手里的CT 片,因为它们切合DICOM 3.0 标准,所以对它们的读取依旧相对简单的。
VTK差不多实现了这种数据的读取,vtkImage Source类的特意多子类都可以达成这种工作,如vtkImageReader 类或许v tkVolumeReader 等。
这样我们编程的时候只需指定一定的参数,便可以实
现对单张CT 片以致CT 片序列的读取了。
依照VTK的数据管道,原始数据读取入了此后,便可以使用各样各样过滤器进行数据变换,在那个例
子里,即进行表面抽取、隐射,而后便可以绘制了。
因为是三维重修,因
此还应当加入交互器,以便可以在绘制窗口里进行交互。
对于重修算法,对于CT 片这种三维规则数据场,可以采纳成熟、差
不多的算法来进行三维重修,比如MarchingCubes算法。
我们使用Visual Studio 6.0 开发平台来达成上述的工作,使对CT 片的读取、重修及显示、交互等功能交融到MFC 的框架中,以便供给一个方便的用户接口。
详细的程序另件给出,各部分的功能可以参照说明。
[ 参照文件 ]
1.The Visualization Toolkit An Object-Oriented Approach To 3D Grap hics, 3rd edition
2.The Visualization Toolkit User's Guide
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。
要使三维物体拥有真切感 , 一定讲明几何物体的一些特征 ,比如光照特征 (泛光 ,漫反射 ,镜面反射 ,边沿颜
色),反射强度 ,物体的灰度 ,物体的绘制款式 (点, 线框 , 表面 ) ,着色模式 ( fla t, Gouraud, Phong)等; VTK 中正是经过属性模型来对其进行讲明的;
(8)映照 (Mapper):vtkMapper 指定了衬着数据和图形库中差不多图元
之间的联系。
VtkMapper 的一些派生
类经过 LookupTable 映照数据并操控图形库中相应Actor 图元的生成。
一个或多个Act or 可以使用相同的Mapper。
Mapper 有多个参数对其进行操控 , 如 ScalarVisibility 标记可以设置 scalar的数据能否阻挡相关的 Actor 的颜色 ; ScalarMode 可以操控 Actor 的颜色是 scal ar 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),过程以下图 :
2007-12-24 11:50
数据源 (Source): vtkSource 是所有数据源的基类 , 其子类定义了很多半据源种类;
过滤器 (Filters):vtkFilter 是各样 Filter 的基类 , 从 vtkSource 中派生出来 , 接收 Source 中的数据 , 进行种
不一样的 Filter 办理工作。
Filters 为 VTK 的重要零件 , 由其基类派生出了很多子类 , 实现了
图形学算法。
将其封装起来, 用户只需要编写简单程序接口调用便可 , 并可以经过改变
参数来达到想要的收效;
映照 (Mappers) : vtkMapper 是所有 Mappers 的基类 , 从 Filtes 赞同数据,并把其映照为图形库中的差不多图
元。
依照映照方式的不一样, 有多个继承子类。
VTK 教程之一可视化管线
VTK 是一个鉴于面向对象的开源三维画图软件包,和其余的的三维画图引擎如OSG、OGRE 不一样之处在于, VTK 可视化对象要紧是各样数据,更为着重对数据剖析办理后的可视化,可视化的内容是人
们没法斩钉截铁感觉到的东西,如地质结构、地层散布、矿床散布、三维
空间应力场的状态变化等等,而OSG、OGRE 是鉴于场景的可视化,更强
调视觉感官的感觉,所以OSG 重要应用于虚构现实领域,而VTK 重要应用于科学运算可视化领域,本教程重要介绍VTK 的可视化应用。
VTK 的可视化设计是鉴于管线流的设计模式,将要办理的数据作为流淌介质在管线中流淌,不一样的期间对数占有不一样的办理方式,VTK 的可视化管线重要由图形模型和可视化模型构成,以下列图所示:
可视化模型重要对数据进行办理,生成可被绘制的几何体,而图形
模型重要对生成的几何体进行绘制,在VTK的可视化管线中所包含的对象
相同包含:源对象、过滤器对象(可选)、映照器对象、Props对象、绘制器对象、绘制窗口,此中源对象、过滤器对象(可选)、映照器对象、绘制器对象、绘制窗口为办理对象, Props 对象为数据对象,映照器对象是
可视化模型和图形模型的接口。
有了可视化管线, VTK 的可视化过程便可以用数据在可视化
管线流淌的过程来描绘(数据在管线中流淌过程中,被管线不一样的对象处理,最后以图形的方式表现数据信息), VTK 的可视化管线拥有以下特色:
1、变换
数据从原始的形式变换成图元的形式,最后以图形的形式显示。
2、表现
用VTK 内部定义的数据结构描绘数据,形成数据集,用图形的方式表现数据。
3、是鉴于面向对象的
用面向对象的看法描绘可视化管线,表现是数据对象,变换是办理对象。
下边我们对 VTK 可视化管线的各个对象分不介绍,在可
视化管线中,按对数据办理方式的不一样,分为数据对象和办理对象,此中数据对象重要作用是表现数据信息,并对表现的信息进行爱惜(创立、访咨询、删除),办理对象重要是对输入的数据进行办理后生成输出新的数据,办理对象重要包含:
1、源对象
数据生成的源泉,数据根源重要包含从磁盘读取数据文件,如 VTK 所支持的各样格式文件生成数据源对象,这种源对象被称为读
源对象,或许利用数学方法生成源对象,如利用多个四边形建立一个圆柱体,这种对象被称为程序源对象。
2、过滤器对象
对源对象进行办理,生成新的数据集输出。
3、映照器对象
映照器对象重要作用是将可视化模型生成的数据变换到图
形模型进行绘制,或许以磁盘文件的形式进行输出。
以上对 VTK 可视化管线做了一个简单的介绍,下边经过一个示例程序来讲明数据是怎样在可视化管线中流淌的。
#include "stdafx.h"
#include "vtkCamera.h"
#include "vtkGenericRenderWindowInteractor.h"
#include "vtkInteractorStyleJoystickCamera.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkLODActor.h"
#include "vtkLight.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkPropPicker.h"
#include "vtkProperty.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkSTLReader.h"
#include "vtkShrinkPolyData.h"
int main( int argc, char *argv[] ) {
//创立绘制器对象
vtkRenderer *ren1 = vtkRenderer::New();
//设置相机
ren1->GetActiveCamera()->SetClippingRange(0.294421 , 29.4421);
ren1->GetActiveCamera()->SetDistance(7.94348);
3);
06);
ren1->GetActiveCamera()->SetParallelProjection(0); ren1-
>GetActiveCamera()->SetUseHorizontalViewAngle(0);
ren1->SetBackground(0.1 , 0.2 , 0.4); ren1-
>SetLightFollowCamera(1); //创立绘制窗口
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren1);
renWin->SetSize(1134 , 624);
//创立交互器
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New ();
iren->SetRenderWindow(renWin);
iren->SetLightFollowCamera(1);
//读源对象读取 stl 数据文件
vtkSTLReader *part = vtkSTLReader::New();
part->SetOutput(part->GetOutput());
part->SetFileName("42400-IDGH.stl");
//创立过滤器对象,该对象将输入数据集的每个单元向单元质心缩短
//将会致使相邻单元之间展现裂痕
vtkShrinkPolyData *shrink = vtkShrinkPolyData::New();
//将源对象和过滤器连结
shrink->SetInput((vtkPolyData *) part->GetOutput());
//设置缩短系数,假如为1,不缩短
shrink->SetShrinkFactor(0.9);
//创立映照器对象
vtkPolyDataMapper *partMapper = vtkPolyDataMapper::New();
partMapper->SetInput((vtkPolyData *) shrink->GetOutput());
partMapper->SetNumberOfPieces(1);
partMapper->SetScalarRange(0, 1);
partMapper->SetColorMode(0);
partMapper->SetResolveCoincidentTopology(0);
partMapper->SetScalarMode(0);
partMapper->SetImmediateModeRendering(0);
partMapper->SetScalarVisibility(1);
partMapper->SetUseLookupTableScalarRange(0);
//创立 Props对象 (Actor)
5);
partActor->GetProperty()->SetColor(0.8275 , 0.8275 , 0.8275);
partActor->GetProperty()->SetDiffuseColor(0.8275 , 0.8275 , 0.8275);
partActor->GetProperty()->SetOpacity(1);
partActor->GetProperty()->SetInterpolation(1);
partActor->GetProperty()->SetRepresentation(2);
partActor->GetProperty()->SetBackfaceCulling(0);
partActor->GetProperty()->SetEdgeVisibility(0);
partActor->GetProperty()->SetFrontfaceCulling(0);
partActor->SetOrigin(0 , 0 , 0);
partActor->SetPosition(0 , 0 , 0);
partActor->SetScale(1 , 1 , 1);
partActor->SetVisibility(1);
//将 Actor 对象增添到绘制器中
ren1->AddActor( partActor );
//绘制
ren1->ResetCamera();
ren1->ResetCameraClippingRange();
renWin->Render();
iren->Initialize();
iren->Start();
//删除对象
iren->Delete();
part->Delete();
partActor->Delete();
partMapper->Delete();
ren1->Delete();
renWin->Delete();
shrink->Delete();
return 0;
}
VTK 教程之二可视化管线的履行
VTK 可视化流水线重要将数据对象和过程对象构成,这两种对象互相
之间可以用多种方式连结在一同,构成可视化管线的拓扑结构,在建立可
视化管线拓扑结构时,一定要保证管线上游的对象输出的数据种类和其下
游对象接收的数据种类保持一致,如一个源对象输出的是一个多边形数据
种类,而和其连结的过滤器对象只好接收规则格网种类的数据,那么可视
化管线就不可以正确地履行,所以,在建立可视化管线时,必定要注意对
象输入、输出之间数据种类的般配性。
建立好可视化管线后,构成可视化管线的各个对象对数据的办理过程,成为可视化管线的履行,当管线中的过程对象或数据发生
改变时,可视化管线都要从头履行,为了保证管线的履行效率,管线在执
行过程中一定保持办理对象的同步,VTK 采用隐式履行的方式保持同步,隐式履行的过程以下列图所示:
隐式履行包含两个互逆的过程,在图中可以看到 Execute()方法的履行是从左到右, UpDate()方法的履行是从右到左。
1、Execute()方法的履行
当可视化管线中的对象创立的时辰发生改变时,表示对象差不多更新,这时Execute()方法被调用,履行过程为从源对象经过过滤器对象到映照器对象。
2、UpDate()方法的履行
当图形系统要求绘制场景时,发出绘制要求(Render()),Up
Date()方法被调用,要求管线中的每个对象更新数据,履行过程为映照器
对象、过滤器对象、源对象挨次调用 Update()方法更新数据。
管线的隐式履行过程:
假定一个可视化管线由源对象、过滤器对象、映照器对象构成,其履
行过程以下:
1)用户发出绘制场景的要求。
2)图形系统的角色(Actor )对象给映照器对象发送场景将要绘制的信
息,管线开始履行。
3)映照器对象调用Update()方法,而后过滤器对象、源对象挨次调用Update()方法。
4)源对象调用Update()方法后,开始比较目前被改正的时辰和最后执
行的时辰,假如目前被改正的时辰比最后被履行的时辰更新,讲明源对象
近来被修悔过,还未履行,所以调用Execute()方法开始履行流水线。
5)过滤器对象及映照器对象开始比较它们的改正时辰
和最后的履行时辰,依照比较的结果断定能否调用Execute()方法。
可视化管线在履行过程中,供给了循环反应体制、种类检
查体制和内存平衡等,下边分不对这几种体制进行讲明:
1)循环反应体制
在可视化流水线中引入反应循环体制,用于将过程对象的输出数据变
成输入数据反应给过程对象,作为过程对象的输入数据,以下列图所示,Int egrate过滤器对初始输入的数据办理后,再将输出的数据反应给Probe过滤器。
2)种类检查体制
种类指办理对象所能办理的数据种类,各样办理对象所能接收、办理
和输出的数据种类是各不相同的,所以,在成立归管线的连结时,要明确
所连结的办理对象所能接收和输出的数据种类,在VTK 中,对输入数据类型的操控供给了两种方法,一种是成立单调数据种类办理的过程对象,只。