您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 环境信息可视化-vtk
本节课内容VTK:ATutorial,介绍VTK的基本内容1WhatisVTK?2VTK图形模型3VTK可视化模型3.0VTK安装(1)在,有vtk5.0版已编译好的安装文件:VTK.ZIP把VTK.ZIP解压到目录python25\下。(2)VTK的主站点在可在该站点上下载最新版的源代码、特定平台的二进制代码、例子、数据和文档等。•VTK是几个较为广泛使用的可视化系统之一。AVS是商用系统,IBM’sDataExplorer(DX)原先为商用系统,目前已转为开放源代码系统并改名为OpenDX.其它还有NAGExplorer4andTemplateGraphicsAmira.•VTK是一个通用可视化系统,已被许多大学和研究机构采用,作为教学和研究工具。许多公司也在其基础上开发了各种可视化系统,包括医学可视化,体可视化,石油勘探,声学系统,流体系统,有限元分析,表面重构等。3.1WhatisVTK?•开放源代码、可移植(WinTel/Unix)、面向对象的3D计算机图形,可视化,和图像处理系统;•以C++语言实现,支持Tcl、Python和Java语言;•支持复杂应用程序开发,应用程序快速原型开发;•支持多种GUI开发环境,如Tk、X/Motif、MFC、wxWidgets。•提供数据表达类型,包括无结构点集,多边形数据,图像,体元,结构格网,正交格网,以及无结构格网等.•通过readers/import以及writers/export和其它程序交换数据。•提供数百个数据处理器处理各种数据,从图像变换到三角网构建.•VTK绘制模式支持2D、多边形、体元和纹理绘制,以及它们的各种组合。3.2VTK结构3.2.1VTK在API访问接口上包括两个主要部分:•C++实现的核心层•自动生成的接口层,包括Tcl、Java和Python.•C++实现的核心层:数据结构、算法和对计算时间要求高的系统函数在C++核心层中实现。核心层中采用对象工厂和虚拟函数等提高系统可移植性以及可扩展性。VTK在核心层独立于任何GUI,不依赖于某一特定的窗口系统。应用程序开发者能很方便地把VTK插入到自己开发的系统中。VTK通过抽象的图像模型实现图形的可移植性。•自动生成的接口层:核心层提供速度和效率,接口层提供的是灵活和可扩展能力。例如使用GUI原型开发工具如Tcl/Tk,Python/Tk,Python/wxPython,或JavaAWT可进行专业应用程序的快速开发。3.2.2VTK内部组成VTK内部包括两个主要的子系统—图形模型子系统和可视化管道子系统。(1)图形模型子系统图形模型是建立在图形语言(如OPENGL)基础上的抽象层,提供跨平台的可移植性。在1993年,不同的计算机平台有各自的图形语言:XGLforSun,StarbaseforHewltt-Packard,glforSiliconGraphics.为了实现图形的平台与设备无关,提出了图形模型.图形模型中的对象采用电影工业中的名称命名。灯光、相机、演员和道具是用户创建场景所使用的类。通过抽象图形模型,3D多边形绘制(lights,cameras,actors)和体绘制以及其它绘制方式就有了一致的访问接口。•绘制窗口和绘制器:可视化具体的数据前,必须在计算机屏幕上打开一个绘制窗口。vtkRenderWindow是一个或多个绘制器在其上进行绘制的窗口的抽象基类。直接调用vtkRenderWindow可以自动生成所在平台上与设备相关的窗口子类。vtkRenderWindow是vtkRenderer对象的容器对象。多个vtkRenderer对象可以平铺在一个vtkRenderWindow中,从而创建复合的可视化系统。下面例子把两个绘制器放在一个绘制窗口中。每一个有不同的背景颜色:fromvtkimport*renWin=vtkRenderWindow()renWin.SetSize(600,300)ren1=vtkRenderer()ren1.SetViewport(0.0,0.0,0.5,1.0)ren1.SetBackground(0.8,0.4,0.2)renWin.AddRenderer(ren1)ren2=vtkRenderer()ren2.SetViewport(0.5,0.0,1.0,1.0)ren2.SetBackground(0.1,0.2,0.4)renWin.AddRenderer(ren2)renWin.Render()运行•交互器:一般,我们使用鼠标控制场景中的相机位置和方向,以及其它道具。vtkRenderWindowInteractor提供交互功能。iren=vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)iren.Initialize()iren.Start()•道具,映射器,和特性道具是被加到绘制器中创建场景的对象。vtkProp是所有2D和3D道具的抽象基类,包含可见性、方向、大小和位置信息。道具与映射器及特性对象关联.映射器引用输入数据对象并知道如何绘制该输入对象.特性对象包含绘制参数,如颜色和材质等.•绘制3D几何数据vtkActor是在场景中绘制3D几何数据的vtkProp道具类的子类。演员类对象自动创建缺省的vtkProperty对象,但要求用户自己创建vtkMapper子类。根据几何特性的不同,从vtkDataSetMapper或vtkPolyDataMapper中选择一个.如果数据是用vtkPolyData表示的,包含点,线,和多边形,则使用vtkPolyDataMapper,否则使用vtkDataSetMapper。下例创建一个立方体:cubeData=vtkCubeSource()cubeMapper=vtkPolyDataMapper()cubeMapper.SetInput(cubeData.GetOutput())cubeActor=vtkActor()cubeActor.SetMapper(cubeMapper)Ren1.AddProp(cubeActor)Ren1.ResetCamera()renWin.Render()运行由于vtkCubeSource对象是多边形数据,使用vtkPolyDataMapper绘制数据,ResetCamera()把相机对准数据•旋转与改变颜色:cubeActor.RotateX(30.0)cubeActor.RotateY(20.0)cubeActor.GetProperty().SetColor(1.0,0.7,0.7)renWinRender使用演员的GetProperty()访问自动创建的特性对象。运行ch3\cubecolor.py•3D体数据绘制vtkImageData是vtkDataSet的子类,可表示1D、2D和3D图像数据。作为vtkDataSet的子类,vtkImageData可用vtkActor表示,并可用vtkDataSetMapper进行绘制。在3D下,vtkImageData数据被看作体元,相应的,它就可用vtkVolume表示,并用vtkVolumeMapper的子类绘制.VTK目前支持三种类型的体绘制—光线跟踪,2D纹理映射,以及VolumePro图形卡.下例中,首先读入一个3D结构数据,然后使用vtkVolumeTextureMapper2D绘制:negReader=vtkSLCReader()negReader.SetFileName(“neghip.slc”)negMapper=vtkVolumeTextureMapper2D()negMapper.SetInput(negReader.GetOutput())体绘制最困难的是定义转换函数,把标量值转成颜色和透明度。negOpacity=vtkPiecewiseFunction()negOpacity.AddPoint(0,0.0)negOpacity.AddPoint(255,0.2)negColor=vtkColorTransferFunction()negColor.AddRGBPoint(64,1.0,0.0,0.0)negColor.AddRGBPoint(128,0.0,0.0,1.0)negColor.AddRGBPoint(196,0.0,1.0,0.0)•创建体元特性和体元道具:negProperty=vtkVolumeProperty()negProperty.SetColor(negColor)negProperty.SetScalarOpacity(negOpacity)negVolume=vtkVolume()negVolume.SetMapper(negMapper)negVolume.SetProperty(negProperty)ren2.AddProp(negVolume)ren2.ResetCamera()renWin.Render()运行•几何与体元的混合:VTK在一个场景中可以混合多个演员和体元进行绘制。下例,多边形和体元混合在一起。posReader=vtkPolyDataReader()posReader.SetFileName(“poshipsurface.vtk”)posMapper=vtkPolyDataMapper()posMapper.SetInput(posReader.GetOutput())posActor=vtkActor()posActor.SetMapper(posMapper)ren2.AddProp(posActor)renWin.Render()运行•2D数据绘制除了3D几何和体元数据,VTK能够可视化2D数据,如几何,图像,和文本。演员,映射器,和特性同样适用于2D数据。下例把2D数据和3D数据混合绘制。vtkActor2D表示场景中的标题,vtkTextMapper绘制文本数据,vtkActor2D自动创建vtkProperty2D对象。titleMapper=vtkTextMapper()titleMapper.SetInput(“ThisisaPinkCube”)titleMapper.GetTextProperty().SetJustificationToCentered()titleActor=vtkActor2D()titleActor.SetMapper(titleMapper)titleActor.GetProperty().SetColor(1,1,0)pc=titleActor.GetPositionCoordinate()pc.SetCoordinateSystemToNormalizedViewport()Pc.SetValue(0.5,0.92)ren1.AddProp(titleActor)renWin.Render()运行2D数据常用于注记,VTK提供了一些对象,能够把多个2D演员和映射器组合成一个2D演员。例如,vtkScalarBarActor把文本和2D多边形组合成图例:scalarBar=vtkScalarBarActor()scalarBar.SetLookupTable(negColor)scalarBar.SetTitle(“Density”)sPC=scalarBar.GetPositionCoordinate()sPC.SetCoordinateSystemToNormalizedViewport()sPC.SetValue(0.8,0.1)ren2.AddProp(scalarBar)renWin.Render()运行•灯光,相机VTK应用程序不需要显式创建vtkLight或vtkCamera。如果没有创建,系统会自动创建。从绘制器可以修改位置、焦点以及视场等。相机包含一些方法,通过它们可调整位置,旋转等,如Azimuth(),Elevatio
本文标题:环境信息可视化-vtk
链接地址:https://www.777doc.com/doc-919042 .html