VTK培训教程.docx

上传人:b****4 文档编号:24444405 上传时间:2023-05-27 格式:DOCX 页数:89 大小:684.02KB
下载 相关 举报
VTK培训教程.docx_第1页
第1页 / 共89页
VTK培训教程.docx_第2页
第2页 / 共89页
VTK培训教程.docx_第3页
第3页 / 共89页
VTK培训教程.docx_第4页
第4页 / 共89页
VTK培训教程.docx_第5页
第5页 / 共89页
点击查看更多>>
下载资源
资源描述

VTK培训教程.docx

《VTK培训教程.docx》由会员分享,可在线阅读,更多相关《VTK培训教程.docx(89页珍藏版)》请在冰豆网上搜索。

VTK培训教程.docx

VTK培训教程

 

VTK(VisualizationToolkit)安装和配置

没有找到vc6.0或vc8.0下的安装版,若是用vc7.0话有现成的安装版本,只能自己动手编译了一下

安装版的配置环境(VC6,Windows)

1.      必须要下载的东西,VC6已经装好为前提:

vtk-5.0.4-win32.exe安装程序xvtk.org的Download

vtk-5.0.4.zip源程序

vtkdata-5.0.4.zip数据

2.      安装vtk-5.0.4-win32.exe在D:

\ProgramFiles\VTK5.0,解压vtk-5.0.4.zip到D:

\ProgramFiles\VTK5.0\vtk-5.0.4,vtkdata-5.0.4.zip到D:

\ProgramFiles\VTK5.0\vtkdata-5.0.4

3.      用cmake编译到D:

\ProgramFiles\VTK5.0\bin下,(这一步花了我不少时间,每次cmake编译到一定量就死掉,不知道什么原因,编译了不下10次终于成功)

4.      参数设置,几个关键参数要注意;

vtk_use_guisupport,打开它,才能选vtk_use_mfc,再configure;

vtk_data_root:

目的是告诉cmake,vtk需要的数据都在哪里,我们的数据在D:

\ProgramFiles\VTK5.0\vtkdata-5.0.4

build_examples:

就是询问是否编译vtk中的例子,我第一次的时候选上了,结果编译了2个小时的例子还没编译完,所以我后来选了off。

build_shared_libs:

如果设置为off,就只会生成lib文件,用于开发肯定是够了。

如果设置为on,将会多生成dll文件,这些dll需要拷到windows/system目录下。

建议选On,

5.      cmake中选ok,在bin文件下,编译dsw文件就行,我大概花6分钟。

6.      测试:

这时新建一个project,win32consoleapplication,anemptyproject,生成后给sourcefiles加一个test.cpp,把下面的代码放进去。

#include"vtkConeSource.h"

#include"vtkPolyDataMapper.h"

#include"vtkRenderWindow.h"

#include"vtkCamera.h"

#include"vtkActor.h"

#include"vtkRenderer.h"

#include"vtkProperty.h"

intmain()

{

      vtkConeSource*cone=vtkConeSource:

:

New();

      cone->SetHeight(3.0);

      cone->SetRadius(1.0);

      cone->SetResolution(10);

      

      vtkPolyDataMapper*coneMapper=vtkPolyDataMapper:

:

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);

      

      inti;

      for(i=0;i<360;++i)

      {

             renWin->Render();

             ren1->GetActiveCamera()->Azimuth(i);

   }

      

      cone->Delete();

      coneMapper->Delete();

      coneActor->Delete();

      ren1->Delete();

      renWin->Delete();

      

      return0;

}

环境路径设置,这个比较重要:

1).修改Projectsetting->C/C++->Category->Preprocessor->Additionalincludedirectories:

D:

\ProgramFiles\VTK5.0\vtk-5.0.4\Graphics,D:

\ProgramFiles\VTK5.0\vtk-5.0.4\Filtering,D:

\ProgramFiles\VTK5.0\vtk-5.0.4\Common,D:

\ProgramFiles\VTK5.0\bin,D:

\ProgramFiles\VTK5.0\vtk-5.0.4\Rendering

2).修改Projectsetting->Link->Input->Object/librarymodules:

opengl32.libkernel32.libuser32.libgdi32.libwinspool.libcomdlg32.libadvapi32.libshell32.libole32.liboleaut32.libuuid.libodbc32.libvtkCommon.libvtkDICOMParser.libvtkexoIIc.libvtkexpat.libvtkFiltering.libvtkfreetype.libvtkftgl.libvtkGenericFiltering.libvtkGraphics.libvtkHybrid.libvtkImaging.libvtkIO.libvtkjpeg.lib vtkNetCDF.libvtkpng.libvtkRendering.libvtksys.libvtktiff.libvtkVolumeRendering.libvtkWidgets.libvtkzlib.lib

3)Projectsetting>Link->Category:

Input->Additionallibrarypath:

D:

\ProgramFiles\VTK5.0\bin\bin\Debug

VTK编程简介(转载)

0如何利用文档

VTK是由WillSchroeder等创立的KitwareInc.的开放源码产品。

Kitware提供关于VTK的技术支持和各种服务产品,包括教科书和用户指南:

TheVisualizationToolkitAnObject-OrientedApproachTo3DGraphics,3rdedition和TheVisualizationToolkitUser'sGuide。

两本书的内容各有侧重,教科书主要介绍可视化的各种算法以及VTK中的数据结构,而用户指南强调软件的使用方法。

可以根据使用过程中遇到的不同问题参考两本书中的相应章节。

编程中对具体的类、函数等的使用可以参考电子版的手册。

编程中遇到的问题,可以在VTK的maillist上提出,一般都会有解答。

1编译VTK库

1.1准备源代码

从xxvtk.org/下载源代码。

源代码按成熟度依次分为官方发行版、每日打包版和CVS开发版,其中官方发行版最稳定,CVS开发版最新。

一般应用使用官方发行版即可。

1.2用CMake产生具体平台下的工程文件

VTK是用C++语言开发的平台无关的图形库。

为了使相互关联的VTK库代码能在不同平台(如Windows和Unix)和不同编译器(如VisualStudio6.0和Borland)下方便使用,Kitware开发了CMake这一转换工具。

比如使用CMake,可以为Windows平台下的VisualStudio6.0产生相应的工程文件(.dsp或.dsw文件),此后就可以在VisualStudio的集成开发环境(IDE)下进行编译连接了。

CMake提供一个用户界面,用户可以定制某些变量,其中比较重要的是BUILD_SHARED_LIBS,根据它的选择可以生成VTK的静态库或者动态链接库。

如果编译成静态库,那么在开发应用程序时要将相应库代码加入可执行程序;如果是动态库,则可执行程序与动态链接库是分离的。

用动态库的好处是可以减小主程序的体积,缺点是可执行程序不能独立运行。

不过在有些情况下,因为某些专利算法在商业用途里只能授权使用,所以VTK提供的部分代码只能以动态链接库的方式使用,所以应该熟悉编译动态链接库的方法。

其他较常见的重要变量有VTK_USE_PATENTED、VTK_USE_HYBRID等,编译时使它们打开开关,就可以编译出相应的库以便日后使用了。

图1

1.3编译库

以下以Windows平台下的VisualStudio6.0编译环境为例来说明使用方法,不再声明。

打开用CMake产生的.dsw文件,选择工程类型进行编译。

工程类型主要分两类:

Release和Debug,开发过程中一般用Debug,到发行时再用Release,所以在此用Debug即可。

编译整个工程产生全部库,这个过程所需时间很长。

编译完成后,会在CMake里面指定的目标目录内(如vtkbin)产生编译出的库文件(缺省在vtkbin/bin/Debug目录内)。

2在VisualStudio6.0开发环境下使用VTK库

VTK库编译好了以后,就可以在VisualStudio开发环境下使用VTK库了。

使用VTK库首先要设置头文件和库文件的路径,以便使用VTK库的程序在编译和链接的时候可以搜索到。

头文件的位置即源代码的各个子目录,里面包含了大量的.h文件。

将其路径加入到VisualStudio6.0的Tools->Options->Directories内,如图2。

注意除了源码的各个子目录外,还要加上一个vtkConfigure.h文件的路径,它在CMake产生的目标目录内。

库文件的设置与此类似,也在Directories页面进行,其路径是前述编译产生库文件的目录(如vtkbin/bin/Debug)。

这样设置好路径以后,使用VTK库的程序就可以正确地编译和链接了。

对于使用动态链接库的程序来说,此时还不能运行编译出来的可执行程序(.exe),还需要一步,即把VTK的动态链接库文件所在路径加入操作系统的环境变量PATH,或直接将这些库文件拷贝到系统目录。

图2

3VTK库编程特点

VTK库是用面向对象的C++语言写成的,由于主要开发者有着十数年涉及可视化系统的经验,所以VTK拥有非常合理的模型和结构。

VTK的编程风格在教科书的附录A,包括命名规范、术语定义、各类对象的用途说明等。

值得注意的,比如它的对象工厂(ObjectFactory)概念。

在VTK里,是用:

:

New()的方式来初始化对象的,而不是用C++中的new来新建对象,对象工厂不仅可以做到代码与设备无关,而且通过引用计数(referencecounting),可以使程序清晰简明,不容易发生内存泄漏或崩溃的问题。

VTK中实现了数百个类及其方法,它们之间简化的继承和关联关系可以从教科书附录A.3的图中看到。

熟悉不同的类的用途和它们之间的关系,对编程十分有利。

对开发者来说,如何扩充这个类库是重要的,教科书的附录A.4介绍了这个问题,而用户指南的开发者指南部分有一章来讲具体的做法。

4通过例子学习VTK概念及编程

要用VTK库进行可视化编程首先要对可视化要有一定的概念和基础。

除了普通的可视化教科书以外,VTK提供的教科书本身就非常好。

VTK源程序包的Example目录包括了一系列例子,它们都有详尽的注释。

一步步学习这些例子,可以很容易理解VTK涉及的可视化概念和VTK编程的一般特点。

学习这些例子首先要成功编译运行它们。

这个步骤跟编译库类似,也需要先用CMake工具生成VisualStudio的工程文件,然后编译;而要保证程序能正确运行,还得保证VTK库文件在环境变量的PATH内。

初学者应该从Tutorial目录内的Stepx例子入手,它们从最简单的VTK程序开始,一步步地增加概念,演示了各种可视化概念。

注意例子里的注释,以第一个程序(Step1的Cone程序)为例,看一下源程序:

源程序:

Example/Tutorial/Step1/Cxx/Cone.cxx

//

//Thisexamplecreatesapolygonalmodelofacone,andthenrendersitto

//thescreen.Itwillrotatethecone360degreesandthenexit.Thebasic

//setupofsource->mapper->actor->renderer->renderwindowis

//typicalofmostVTKprograms.

//

//FirstincludetherequiredheaderfilesfortheVTKclassesweareusing.

#include"vtkConeSource.h"

#include"vtkPolyDataMapper.h"

#include"vtkRenderWindow.h"

#include"vtkCamera.h"

#include"vtkActor.h"

intmain(intargc,char*argv[])

{

 //

 //NextwecreateaninstanceofvtkConeSourceandsetsomeofits

 //properties.TheinstanceofvtkConeSource"cone"ispartofa

 //visualizationpipeline(itisasourceprocessobject);itproducesdata

 //(outputtypeisvtkPolyData)whichotherfiltersmayprocess.

 //

 vtkConeSource*cone=vtkConeSource:

:

New();

 cone->SetHeight(3.0);

 cone->SetRadius(1.0);

 cone->SetResolution(10);

 //

 //Inthisexampleweterminatethepipelinewithamapperprocessobject.

 //(IntermediatefilterssuchasvtkShrinkPolyDatacouldbeinsertedin

 //betweenthesourceandthemapper.) Wecreateaninstanceof

 //vtkPolyDataMappertomapthepolygonaldataintographicsprimitives.We

 //connecttheoutputoftheconesouecetotheinputofthismapper.

 //

 vtkPolyDataMapper*coneMapper=vtkPolyDataMapper:

:

New();

 coneMapper->SetInput(cone->GetOutput());

程序段1

这个简单的例子是一个控制台下的程序,创建一个棱锥,在屏幕上绘制,旋转360度后退出。

程序虽简单,但已经包括了数据源、映射器、演员、绘制器、绘制窗口等概念,这些概念在VTK编程中几乎都是必然涉及的。

通过这个例子,就可以对教科书里讲到的各种可视化概念(如相机、演员),编程模型(如管道)等有直观的了解了。

这里仅举这个最简单的例子,事实上,VTK自带的例子循序渐进,从简单的概念,到各种复杂的概念、算法和数据结构、GUI编程、直到具体的应用等,都做了很好的例证。

结合教科书和例子,可以较快地理解VTK的各个方面。

比如说,如果要用VTK在Win32环境下编程,应该学习Example/GUI/Win32下的例程,如果要用MFC框架,那么可以参考其中的vtkMFC例程。

体会VTK库和Win32的关系、和MFC框架的关系,以便在这些平台上开发自己的程序。

这需要对VTK和操作系统、编程环境本身有比较深入的了解,而这种了解对自行开发程序是十分必要的。

5用VTK进行CT片三维重构

VTK作为一种通用的可视化类库,在科学和工程界有着广泛的应用。

其中一种重要而常见的应用就是在医学领域,比如著名的“可视化人”项目,就有VTK的应用。

实际上,VTK在医学方面的应用是是VTK比较强调的,在它提供的例程应用中,就有专门的医学目录。

学习它们,并应用于我们的项目中,是一条合适的途径。

比如,如果要做一个3D的医学影像系统,其中重要的一个环节就是三维重构,这也是在全膝置换手术中需要的。

所以,用VTK进行CT片的三维重构,就是一个合适的应用的例子。

利用VTK做CT片的三维重构,从算法和数据结构来看,就是一个读取数据问题和一个图形显示问题。

对于我们手里的CT片,因为它们符合DICOM3.0标准,所以对它们的读取还是相对容易的。

VTK已经实现了这类数据的读取,vtkImageSource类的很多子类都可以完成这种工作,如vtkImageReader类或者vtkVolumeReader等。

这样我们编程的时候只要指定必须的参数,就可以实现对单张CT片乃至CT片序列的读取了。

根据VTK的数据管道,原始数据读取入了以后,就可以使用各种各种过滤器进行数据转换,在这个例子里,即进行表面抽取、影射,然后就可以绘制了。

因为是三维重建,所以还应该加入交互器,以便可以在绘制窗口里进行交互。

关于重建算法,对于CT片这种三维规则数据场,可以采取成熟、基本的算法来进行三维重建,比如MarchingCubes算法。

我们使用VisualStudio6.0开发平台来完成上述的工作,使对CT片的读取、重建及显示、交互等功能融合到MFC的框架中,以便提供一个方便的用户接口。

具体的程序另件给出,各部分的功能可以参考注释。

[参考文献]

1.TheVisualizationToolkitAnObject-OrientedApproachTo3DGraphics,3rdedition

2.TheVisualizationToolkitUser'sGuide

3.VTK源码:

xxvtk.org/get-software.php

4.VTK电子文档:

xxvtk.org/get-software.php

5.VTK邮件列表:

xpublic.kitwarex/mailman/listinfo/vtkusers

6.xdigitalne.nju.edux/new/course/vtk/index.htm

VTK数据类型

分为两种:

vtk是基于C++的库,自然是面向对象的库了~对象类型有两种

图形模型对象(theGraphicsModels)

可视化模型对象(theVisualizationModels)

整个图形模型主要分为九类对象:

(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。

要使三维物体具有真实感,必须说明几何物体的一些特性,例如光照特性(泛光,漫反射,镜面反射,边缘颜色),反射强度,物体的灰度,物体的绘制样式(点,线框,表面),着色模式(flat,Gouraud,Phong)等;VTK中正是通过属性模型来对其进行说明的;

(8)映射(Mapper):

vtkMapper指定了渲染数据和图形库中基本图元之间的联系。

VtkMapper的一些派生

  类通过LookupTable映射数据并控制图形库中相应Actor图元的生成。

一个或多个Act     or可以使用相同的Mapper。

Mapper有多个参数对其进行控制,如ScalarVisibility标志可以设置scala

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1