VTK简介

VTK(Visualization ToolKit)是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D计算机图形,图像处理,可视化。VTK包含一个c++类库,众多的翻译接口层,包括Tcl/TkJava,Python Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。比如Visualization Toolkit 将我们在表面重建中比较常见的Marching Cubes 算法封装起来,以类的形式给我们以支持,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写MarchingCubes 算法的代码,而直接使用Visualization Toolkit 中已经提供的vtkMarchingCubes 类。 Visualization Toolkit 是给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具,它以用户使用的方便性和灵活性为主要原则,具有如下的特点:

(1) 具有强大的三维图形功能。Visualization Toolkit 既支持基于体素Voxel-basedrendering 的体绘制Volume Rendering又保留了传统的面绘制,从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。

(2) Visualization Toolkit 的体系结构使其具有非常好的流streaming 和高速缓存caching 的能力,在处理大量的数据时不必考虑内存资源的限制。

(3) Visualization Toolkit 能够更好的支持基于网络的工具比如Java VRML 随着Web Internet 技术的发展Visualization Toolkit 有着很好的发展前景。

(4) 能够支持多种着色。

(5) Visualization Toolkit 具有设备无关性使其代码具有良好的可移植性。

(6) Visualization Toolkit 中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。

(7) Visualization Toolkit 具有更丰富的数据类型,支持对多种数据类型进行处理 。

(8) 既可以工作于Windows 操作系统又可以工作于Unix 操作系统极大的方便了用户。

2. VTK基本概念

VTK编程中的核心概念是pipeline,如图所示:

 

                  pipeline示意图

    其中涉及的基本对象有9个:

下面是这些对象的简单描述和使用方法示例。

(1)Render Interactor: 用于实现与绘制窗口的用户交互。

vtkRenderWindowInteractor iren

irenSetRenderWindow(renWin)       //与绘制窗口关联

irenSetImeractorStyle(flightStyle)//设置交互方式

(2)RenderWindow: 接受1个或多个Renderer生成场景,并管理显示设备窗口。

vtkRenderWindow renWin

renWinAddRcnderer(ren)            //关联绘制者

(3)Renderer: 对LightCameraActor进行坐标定位。

vtkRenderer ren

renAddActor(actor)                 //添加实体

renAddLight(1ight)                 //添加光源

renGetAetiveCamera(camera)         //设置当前照相机

(4)Light: 对场景中的Actor赋予光照度。

vtkLight light

light.SetColor(100)              //设置光的颜色

light.SetFocalPoint(cam.GetFocalPoint);//设置光线焦点

light.SetPosition(cam.GetPosifion)   //设置光源位置

ren.AddLight(1ight)                  //将光源与绘制者关联

(5) Camera: 定义场景的视角、焦点等属性。

VtkCamera cam

Cam.SetClipingRange(O.04755722.37786)  //设置视场法向范围

//设置焦点坐标

Cam.SetFocaclPoint(0.O52665,-0.129454,-0.0573973)

//设置照相机位置

Cam.SetPosition(O.327637-0.116299-0.256418)

//重置视场法向

Cam.ComputeViewPlaneNormal         

//置视场上下方向           

cam.SetViewUp(-0.02253860.9991370.034901)

//将照相机与绘制者关联

ren.SetActiveCamera(cam)                  

(6)Actor:场景中绘制的实体,由Mapperpropertytransform对象定义。

vtkActor actor

//设置相关联的映射器

actor.SetMapper(mapper)             

//得到相关联的属性对象     

prop=actor.GetProperty                  

//设置属性对象的属性

prop.SetOpacity(O25)                  

(7)Property: 用于设置Actor的颜色、亮度、纹理图、绘制方式和阴影方式等表面属性。

vtkProperty prop

//设置不透明度

prop.SetOpacity(O.25)                  

//设置环境光照系数

prop.SetAmbient(O.5)                   

//设置漫反射光系数

prop.SetDiffuse(0.6)                   

//设置镜面光系数

prop.SetSpecular(1.0)                  

//没置镜面光强度

prop.SetSpecularPower(100)           

(8)Mapper:  代表了实体的几何形状

VtkPolyDataMapper mapper

Mapper.SetlookupTable(1ut)             //指定查找表

Mapper.SetInput(plane.GetOutput);         //设定输入

Mapper.SetScalarRange(0.1978130.710419);//设定坐标最大值和最小值

(9)Transform:  定义ActorCamerasLights的位置和方向,

4 x 4变换矩阵和修改此矩阵的方法组成[23]

vtkTransform trans

trans.Identity                       //转换模式初始化

trans.Translate(0.201.25)       //转换

//指定Xvz方向上的变换比例

transSeale(O50505)

3. VC环境下利用VTK开发体数据可视化程序步骤

VC6.0下利用VTK4.2开发体数据可视化程序,其步骤如下:

(1)CRayCastView中定义

    vtkWin32OpenGLRenderWindow *renWin;        

    vtkRenderer *ren;

    vtkWin32RenderWindowInteractor *iren;

    vtkPiecewiseFunction *opacityTransferFunction;

    vtkColorTransferFunction *colorTransferFunction;

    vtkVolumeProperty *volumeProperty;

    vtkVolumeRayCastCompositeFunction *compositeFunction;

    vtkVolumeRayCastMapper *volumeMapper;

    vtkVolume *volume;

(2)CRayCastView构造函数中创建变量,并在析构函数中销毁这些变量。

(3)OnCreateOnSize函数中,设定vtkWin32OpenGLRenderWindowvtkRenderer的相关参数。

(4)定义pipeline绘图函数,并在OnDraw函数中进行调用。 

//设置透明度与颜色  

opacityTransferFunction->AddPoint(20, 0.0);

    opacityTransferFunction->AddPoint(100, 0.2);

      

colorTransferFunction->AddRGBPoint(0.0, 0.0, 0.0, 1.0);

colorTransferFunction->AddRGBPoint(12.0, 0.0, 1.0, 0.0);      

    colorTransferFunction->AddRGBPoint(12.0, 1.0, 0.0, 0.0);        volumeProperty->SetColor(colorTransferFunction);

volumeProperty->SetScalarOpacity(opacityTransferFunction);

volumeProperty->ShadeOn();

volumeProperty->SetInterpolationTypeToLinear();        

volumeMapper->SetVolumeRayCastFunction(compositeFunction);

volumeMapper->SetInput((vtkImageData*)pDoc->Reader->GetOutput());

      

volume->SetMapper(volumeMapper);

    volume->SetProperty(volumeProperty);     

this->ren->AddVolume(volume);

  <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值