1、本节课内容VTK:A Tutorial,介绍VTK的基本内容1 What is VTK?2 VTK图形模型3 VTK可视化模型3.0 VTK安装在,有vtk 5.0版已编译好的安装文件:VTK.ZIP把VTK.ZIP解压到目录python25下。(2)VTK的主站点 在可在该站点上下载最新版的源代码、特定平台的二进制代码、例子、数据和文档等。VTK 是几个较为广泛使用的可视化系统之一。AVS 是商用系统,IBM s Data Explorer(DX)原先为商用系统,目前已转为开放源代码系统并改名为OpenDX.其它还有NAG Explorer 4 and Template Graphics A
2、mira.VTK是一个通用可视化系统,已被许多大学和研究机构采用,作为教学和研究工具。许多公司也在其基础上开发了各种可视化系统,包括医学可视化,体可视化,石油勘探,声学系统,流体系统,有限元分析,表面重构等。3.1 What is VTK?开放源代码、可移植(WinTel/Unix)、面向对象的3D计算 机图形,可视化,和图像处理系统;以 C+语言实现,支持Tcl、Python和Java语言;支持复杂应用程序开发,应用程序快速原型开发;支持多种GUI开发环境,如Tk、X/Motif、MFC、wxWidgets。提供数据表达类型,包括无结构点集,多边形数据,图像,体元,结构 格网,正交格网,以及
3、无结构格网等.通过 readers/import以及writers/export和其它程序交换数据。提供数百个数据处理器处理各种数据,从图像变换到三角网构建.VTK绘制模式支持2D、多边形、体元和纹理绘制,以及它们的各 种组合。3.2 VTK结构3.2.1 VTK 在API访问接口上包括两个主要部分:C实现的核心层 自动生成的接口层,包括Tcl、Java和Python.C实现的核心层:数据结构、算法和对计算时间要求高的系统函数在C核心层中实现。核心层中采用对象工厂和虚拟函数等提高系统可移植性以及可扩展性。VTK在核心层独立于任何GUI,不依赖于某一特定的窗口系统。应用程序开发者能很方便地把VT
4、K插入到自己开发的系统中。VTK通过抽象的图像模型实现图形的可移植性。自动生成的接口层:核心层提供速度和效率,接口层提供的是灵活和可扩展能力。例如使用GUI原型开发工具如Tcl/Tk,Python/Tk,Python/wxPython,或 Java AWT可进行专业应用程序的快速开发。3.2.2 VTK内部组成VTK内部包括两个主要的子系统 图形模型子系统和可视化管道子系统。(1)图形模型子系统图形模型是建立在图形语言(如OPENGL)基础上的抽象层,提供跨平台的可移植性。在1993年,不同的计算机平台有各自的图形语言:XGL for Sun,Starbase for Hewl tt-Pack
5、ard,gl for Silicon Graphics.为了实现图形的平台与设备无关,提出了图形模型.图形模型中的对象采用电影工业中的名称命名。灯光、相机、演员和道具是 用户创建场景所使用的类。通过抽象图形模型,3D多边形绘制(lights,cameras,actors)和体绘制以及其它绘制方式就有了一致的访问接口。绘制窗口和绘制器:可视化具体的数据前,必须在计算机屏幕上打开一个绘制窗口。vtkRenderWindow是一个或多个绘制器在其上进行绘制的窗口的抽象基类。直接调用vtkRenderWindow 可以自动生成所在平台上与设备相关的窗口子类。vtkRenderWindow是vtkRen
6、derer对象的容器对象。多个vtkRenderer对象可以平铺在一个vtkRenderWindow 中,从而创建复合的可视化系统。下面例子把两个绘制器放在一个绘制窗口中。每一个有不同的背景颜色:from vtk import*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.SetViewpor
7、t(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道具的抽象基类,包含可
8、见性、方向、大小和位置信息。道具与映射器及特性对象关联.映射器引用输入数据对象并知道如何绘制该输入对象.特性对象包含绘制参数,如颜色和材质等.绘制3D 几何数据vtkActor是在场景中绘制3D几何数据的 vtkProp道具类的子类。演员类对象自动创建缺省的vtkProperty对象,但要求用户自己创建vtkMapper子类。根据几何特性的不同,从vtkDataSetMapper或vtkPolyDataMapper中选择一个.如果数据是用vtkPolyData表示的,包含点,线,和多边形,则使用 vtkPolyDataMapper,否则使用vtkDataSetMapper。下例创建一个立方体:
9、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
10、.0)cubeActor.RotateY(20.0)cubeActor.GetProperty().SetColor(1.0,0.7,0.7)renWin Render使用演员的GetProperty()访问自动创建的特性对象。运行ch3cubecolor.py 3D体数据绘制vtkImageData是vtkDataSet的子类,可表示1D、2D和3D图像数据。作为vtkDataSet的子类,vtkImageData可用vtkActor表示,并可用 vtkDataSetMapper进行绘制。在3D下,vtkImageData数据被看作体元,相应的,它就可用vtkVolume表示,并用 vtkV
11、olumeMapper的子类绘制.VTK目前支持三种类型的体绘制 光线跟踪,2D纹理映射,以及VolumePro图形卡.下例中,首先读入一个3D结构数据,然后使用vtkVolumeTextureMapper2D绘制:negReader=vtkSLCReader()negReader.Set(“neghip.slc”)negMapper=vtkVolumeTextureMapper2D()negMapper.SetInput(negReader.GetOutput()体绘制最困难的是定义转换函数,把标量值转成颜色和透明度。negOpacityvtkPiecewiseFunction()negOp
12、acity.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(negO
13、pacity)negVolume=vtkVolume()negVolume.SetMapper(negMapper)negVolume.SetProperty(negProperty)ren2.AddProp(negVolume)ren2.ResetCamera()renWin.Render()运行 几何与体元的混合:VTK在一个场景中可以混合多个演员和体元进行绘制。下例,多边形和体元混合在一起。posReader=vtkPolyDataReader()posReader.Set(“poshipsurface.vtk”)posMapper=vtkPolyDataMapper()posMappe
14、r.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()title
15、Mapper.SetInput(“This is a Pink Cube”)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.A
16、ddProp(titleActor)renWin.Render()运行2D数据常用于注记,VTK提供了一些对象,能够把多个2D 演员和映射器组合成一个2D演员。例如,vtkScalarBarActor 把文本和2D多边形组合成图例:scalarBar=vtkScalarBarActor()scalarBar.SetLookupTable(negColor)scalarBar.SetTitle(“Density”)sPC=scalarBar.GetPositionCoordinate()sPC.SetCoordinateSystemToNormalizedViewport()sPC.SetVal
17、ue(0.8,0.1)ren2.AddProp(scalarBar)renWin.Render()运行 灯光,相机VTK应用程序不需要显式创建vtkLight 或 vtkCamera。如果没有创建,系统会自动创建。从绘制器可以修改位置、焦点以及视场等。相机包含一些方法,通过它们可调整位置,旋转等,如Azimuth(),Elevation(),Roll(),Pitch(),and Yaw()。cam=ren2.GetActiveCamera()cam.Azimuth(20.0)cam.Elevation(10.0)renWin.Render()运行灯光缺省是白光,位置和焦点缺省情况下和相机一致。
18、下例加入第二个光源,绿色。light=vtkLight()light.SetFocalPoint(0.0,0.0,0.0)light.SetPosition(1.0,0.0,0.0)light.SetColor(0.0,1.0,0.0)light.SetIntensity(0.5)ren2.AddLight(light)renWin.Render()运行(2)VTK可视化管道VTK 数据处理管道把数据变换成可由图形子系统绘制的形式,或 变换成其它形式,以待管道的后续处理。例如,读入离散点,通过三角化创建多边形,使用面绘制显示mesh面等构成一个数据处理管道。管道,也叫做可视化网络,通过连接处理
19、对象和数据对象构成。数据对象提供对数据的访问,处理对象操作数据对象。在实现上,连接通过 SetInput()/GetOutput()方法实施:aFilter.SetInput(bFilter.GetOutput()Filters创建与它的输出类型一致的内部数据对象。只有输出与输入类型匹配的连接能够成立。上例中,bFilter的输出类型和aFilter的输入类型必须一致。类型检查可在编译时或运行时进行。一旦管道构建起来,Filters则只有在内部状态改变了或它的输入数据改变了才能重新执行。VTK 采用分布式隐含更新方法控制管道的运行。每个对西那个管理一个内部时间标记,只有过时的对象才能重新运算。
20、数据对象:VTK一般把数据表示成场数据,数据集是带有拓扑和几何结构的数据对象。除了结构,数据集还附带有属性数据。属性数据包括:标量,矢量,张量,法向,纹理坐标,以及场数据。处理对象:VTK提供了数百个处理对象。其中多数只处理一种数据类型(如图像处理对象)。一些处理对象如vtkContourFilter 接受一种类型的数据输入,输出另一种类型的数据。处理对象一般被称为Filters。VTK把处理对象分为三类:源处理对象,过滤器,和映射器。源处理对象没有VTK数据输入,但产生一到多个输出,如读入器。过滤器接受一到多个输入,产生一到多个输出。映射器是管道的终点,它或者和图形系统耦合在一起,或者把数据
21、写到磁盘或另一管道。例子:读取数字化的多边形数据,然后简化,用Laplacian 光滑减少面噪声,生成面法线,修饰表面:读多边形数据:Reader=vtkBYUReader()Reader.SetGeometry(“fran.g”)创建管道,由decimator,smoother,和 normal generator组成。Deci=vtkDecimatePro()Deci.SetInput(reader.GetOutput()Deci.SetTargetReduction(0.9)Deci.PreserveTopologyOn()Smoother=vtkSmoothPolyDataFilter
22、()Smoother.SetInput(deci.GetOutput()Normals=vtkPolyDataNormals()Normals.SetInput(smoother.GetOutput()Normals.SetFeatureAngle(60)mapper=vtkPolyDataMapper()Mapper.SetInput(normals.GetOutput()fran=vtkActor()Fran.SetMapper(mapper)Fran.GetProperty().SetColor(1,0.49,0.25)ptMask=vtkMaskPoints()ptMask.SetIn
23、put(normals.GetOutput()ptMask.SetOnRatio(10)ptMask.RandomModeOn()cone=vtkConeSource()Cone.SetResolution(6)Transform=vtkTransform()Transform.Translate(0.5,0.0,0.0)transformF=vtkTransformPolyDataFilter()transformF.SetInput(cone.GetOutput()transformF.SetTransform(transform)Glyph.vtkGlyph3D()Glyph.SetIn
24、put(ptMask.GetOutput()Glyph.SetSource(transformF.GetOutput()Glyph.SetVectorModeToUseNormal()Glyph.SetScaleModeToScaleByVector()Glyph.SetScaleFactor(0.004)spikeMapper=vtkPolyDataMapper()spikeMapper.SetInput(glyph.GetOutput()spikeActor=vtkActor()spikeActor.SetMapper(spikeMapper)spikeActor.GetProperty(
25、).SetColor(0,.79,.34)ren3=vtkRenderer()renWin2=vtkRenderWindow()renWin2.AddRenderer(ren3)Iren2=vtkRenderWindowInteractor()Iren2.SetRenderWindow(renWin2)Ren3.AddActor(fran)Ren3.AddActor(spikeActor)renWin2.Render()运行 第一套 作业要求:一 创建交互器和交互窗口 a 创建1个交互器vtkRenderWindowInteractor;b 创建1个绘制窗口vtkRenderWindow;c
26、在上述绘制窗口中,创建3个绘制器vtkRenderer。二 绘制内容 1 在第一个绘制器中:绘制一个立方体cube和一个标题如“This is a cube”;2 在第二个绘制器中:在1的基础上,改变缺省灯光的颜色为绿色,并改变缺省相机的方位角;3 在第三个绘制器中:绘制一个图例,颜色由黄色变到蓝色,范围从100到200;三 提交方式:通过email发到下一节课内容:4.1 可视化数据类型4.2 科学数据管理4.3 科学数据格式4.4 图形图像数据格式4.5 VTK中的数据对象网格数据:笛卡儿网格规整网格矩形网格结构网格非结构网格曲线网格块结构网格混合结构网格散乱点科学数据格式:HDF格式CD
27、F和NetCDFVTK中的数据对象:vtkDataObjectvtkPiecewiseFunctionvtkDataSetvtkImageDatavtkStructuredPointsvtkImageCanvasSource2DvtkPointSetvtkPolyDatavtkStructuredGridvtkUnstructuredGridvtkRectilinearGridvtkDataSetAttributesvtkPointDatavtkCellDatavtkFieldDatavtkAttributeDatavtkCellvtkHexahedron vtkLine vtkPixel v
28、tkPolyLine vtkPolyVertex vtkPolygon vtkQuad vtkTetra vtkTriangle vtkTriangleStrip vtkVertex vtkVoxel vtkWedge vtkPyramid 9、要学生做的事,教职员躬亲共做;要学生学的知识,教职员躬亲共学;要学生守的规则,教职员躬亲共守。2022-12-152022-12-15Thursday,December 15,202210、阅读一切好书如同和过去最杰出的人谈话。2022-12-152022-12-152022-12-1512/15/2022 3:21:24 PM11、一个好的教师,是一
29、个懂得心理学和教育学的人。2022-12-152022-12-152022-12-15Dec-2215-Dec-2212、要记住,你不仅是教课的教师,也是学生的教育者,生活的导师和道德的引路人。2022-12-152022-12-152022-12-15Thursday,December 15,202213、He who seize the right moment,is the right man.谁把握机遇,谁就心想事成。2022-12-152022-12-152022-12-152022-12-1512/15/202214、谁要是自己还没有发展培养和教育好,他就不能发展培养和教育别人。2
30、022年12月15日星期四2022-12-152022-12-152022-12-1515、一年之计,莫如树谷;十年之计,莫如树木;终身之计,莫如树人。2022年12月2022-12-152022-12-152022-12-1512/15/202216、提出一个问题往往比解决一个更重要。因为解决问题也许仅是一个数学上或实验上的技能而已,而提出新的问题,却需要有创造性的想像力,而且标志着科学的真正进步。2022-12-152022-12-15December 15,202217、儿童是中心,教育的措施便围绕他们而组织起来。2022-12-152022-12-152022-12-152022-12-15 谢谢观赏谢谢观赏 You made my day!You made my day!我们,还在我们,还在路路上上
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。