下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、报告人:邹水中 日 期:2010.4.2,VTK使用总结,内容简介,一、VTK程序一般流程 二、VTK的数据对象接口 三、 VTK的面绘制、体绘制、多平面显示 四、视点变换与相机控制 五、 VTK事件交互、VTK与MFC混合编程 六、VTK视窗控制与文本标注 七、VTK在测量中应用与VTK数据切割,第一部分 VTK程序一般流程,Visualization Toolkit 的机制Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的。 它将在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些
2、常用的算法封装起来。比如Visualization Toolkit 将在表面重建中比较常见的Marching Cubes 算法封装起来,以类的形式给以支持, 这样在对三维规则点阵数据进行表面重建时就不必再重复编写Marching Cubes 算法的代码而直接使用Visualization Toolkit 中已经提供的vtkMarchingCubes 类。,Visualization Toolkit 的框架结构,图形流水线:将几何数据转换为图像;可视化流水线:将信息转换为几何数据.另一种看法是:可视化流水线:负责构建几何表示;图形流水线:负责绘制. vtk使用一种lazy评价机制. 对于lazy
3、评价机制,通常无需人工地调用Update(),因为filters连接着可视化流水线,当actor接收到绘制本身的要求会将方法回馈到他的mapper,然后Update方法自动发送至可视化流水线。Render方法通常开始数据要求,数据被通过流水线向下投递。依赖于流水线的哪个端口过时,流水线中的filters可能重新执行,将数据送至更新的流水线末端,通过actor绘制.,可视化模型,VTK 图形模型由以下核心对象组成 vtkActor,vtkActor2D,vtkVolume vtkProp 和/或vtpProp3D 的子类 vtkLight vtkCamera vtkProperty,vtkPro
4、perty2D vtkMaper,vtkMapper2D vtkAbstractMapper 的子类 vtkTransform vtkLookupTable,vtkColorTransferFunction- vtkScalarsToColors 的子类 /for objects that convert scalars to colors vtkRender vtkRenderWindow vtkRenderWindowInteractor,图形模型,vtkLight 用来展示和操控场景中的灯光,只在3D中用到. VtkCamera 控制3D几何投影到2D。定位:定点、方向,还控制视角投影和
5、立体视图. vtkMapper 与查找表vtkLookupTable联合使用,用于转换和绘制几何体。Mapper提供可视化流水线和图形模型. vtkLookupTable 是vtkScalarsToColors和vtkColorTransferFunction的子类.,vtkRenderer和vtkRenderWindow 用来管理图形机与电脑窗口系统的接口.可以生成多个render windows,每个render windows中有多个renderer去绘制.一个render window中可以有多个区域(视窗). vtkRenderWindowInteractor 用于与场景交互,操纵c
6、amera,选择对象. vtkWin32OpenGLRenderWindow和vtkWin32RenderWindowInteractor vtkWin32OpenGLRenderWindow is a concrete implementation of the abstract class vtkRenderWindow. vtkWin32OpenGLRenderer interfaces to the standard OpenGL graphics library in the Windows/NT environment. implements Win32 specific func
7、tions required by vtkRenderWindowInteractor.,vtkActor的子类 vtkAssembly,vtkFollower,vtkLODActor等. vtkAssembly允许actors分层,在层级平移、旋转、缩放时合理转换. vtkLODActor在改变几何表示时保持交互帧速率,示例代码1 演示VTK一般流程及常用类的使用,vtkVolume16Reader *v16 = vtkVolume16Reader:New(); v16-SetDataDimensions(64,64); v16-SetDataByteOrderToLittleEndian(
8、); v16-SetFilePrefix (D:/VTK 5.4/VTKData/Data/headsq/quarter); v16-SetImageRange(1, 93); v16-SetDataSpacing (3.2, 3.2, 1.5); vtkContourFilter *skinExtractor = vtkContourFilter:New(); skinExtractor-SetInputConnection( v16-GetOutputPort(); skinExtractor-SetValue(0, 500); vtkPolyDataNormals *skinNormal
9、s = vtkPolyDataNormals:New(); skinNormals-SetInputConnection(skinExtractor-GetOutputPort(); skinNormals-SetFeatureAngle(60.0); /if the surface normal between two adjacent triangles is = FeatureAngle, an edge exists vtkStripper *skinStripper = vtkStripper:New(); skinStripper-SetInputConnection(skinNo
10、rmals-GetOutputPort(); vtkPolyDataMapper *skinMapper = vtkPolyDataMapper:New(); skinMapper-SetInputConnection(skinStripper-GetOutputPort(); skinMapper-ScalarVisibilityOff();,示例代码1,vtkActor *skin = vtkActor:New(); skin-SetMapper(skinMapper); skin-GetProperty()-SetDiffuseColor(1, .49, .25); skin-GetPr
11、operty()-SetSpecular(.3); skin-GetProperty()-SetSpecularPower(20); vtkLookupTable *bwLut = vtkLookupTable:New(); bwLut-SetTableRange (0, 2000); bwLut-SetSaturationRange(0, 1); bwLut-SetHueRange (0, 1); bwLut-SetValueRange (0.5, 1); bwLut-Build(); /effective built / The result is an image of type VTK
12、_UNSIGNED_CHAR vtkImageMapToColors *saggitalColors = vtkImageMapToColors:New(); saggitalColors-SetInputConnection(v16-GetOutputPort(); saggitalColors-SetLookupTable(bwLut); vtkImageActor *saggital = vtkImageActor:New(); saggital-SetInput(saggitalColors-GetOutput(); saggital-SetDisplayExtent(32,32, 0
13、,63, 0,92);,vtkRenderer *aRenderer = vtkRenderer:New(); vtkRenderWindow *renWin = vtkRenderWindow:New(); renWin-AddRenderer(aRenderer); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor:New(); iren-SetRenderWindow(renWin); vtkCamera *aCamera = vtkCamera:New(); aCamera-SetViewUp (0, 0, -1);
14、 aCamera-SetPosition (0, 1, 0); aCamera-SetFocalPoint (0, 0, 0); aCamera-ComputeViewPlaneNormal(); aRenderer-AddActor(saggital); skin-GetProperty()-SetOpacity(0.5); aRenderer-SetActiveCamera(aCamera); aRenderer-Render(); aRenderer-ResetCamera (); aCamera-Dolly(1.5); aRenderer-SetBackground(1,1,1); a
15、Renderer-ResetCameraClippingRange (); renWin-SetSize(640, 480); iren-Initialize(); iren-Start();,示例代码3 演示视窗显示控制、相机控制,class vtkWidgetWindowLevelCallback : public vtkCommand public: static vtkWidgetWindowLevelCallback *New() return new vtkWidgetWindowLevelCallback; void Execute( vtkObject *caller, uns
16、igned long vtkNotUsed( event ), void *callData ) vtkImagePlaneWidget* self = reinterpret_cast( caller ); if(!self) return; double* wl = static_cast( callData );,if ( self = this-WidgetX ) this-WidgetY-SetWindowLevel(wl0,wl1); this-WidgetZ-SetWindowLevel(wl0,wl1); else if( self = this-WidgetY ) this-
17、WidgetX-SetWindowLevel(wl0,wl1); this-WidgetZ-SetWindowLevel(wl0,wl1); else if (self = this-WidgetZ) this-WidgetX-SetWindowLevel(wl0,wl1); this-WidgetY-SetWindowLevel(wl0,wl1); ,vtkWidgetWindowLevelCallback():WidgetX( 0 ), WidgetY( 0 ), WidgetZ ( 0 ) vtkImagePlaneWidget* WidgetX; vtkImagePlaneWidget
18、* WidgetY; vtkImagePlaneWidget* WidgetZ; ; int main( int argc, char *argv ) vtkRenderer* ren1 = vtkRenderer:New(); vtkRenderer* ren2 = vtkRenderer:New(); vtkRenderer* ren3 = vtkRenderer:New(); vtkRenderer* ren = vtkRenderer:New(); vtkRenderWindow* renWin = vtkRenderWindow:New(); vtkRenderWindowInter
19、actor* iren = vtkRenderWindowInteractor:New(); iren-SetRenderWindow(renWin); renWin-AddRenderer(ren1); renWin-AddRenderer(ren2); renWin-AddRenderer(ren3); renWin-AddRenderer(ren);,vtkDICOMImageReader *v16 = vtkDICOMImageReader:New(); v16-SetDataByteOrderToLittleEndian(); v16-SetDirectoryName(E:/MedI
20、mageData/336); v16-Update(); vtkOutlineFilter* outline = vtkOutlineFilter:New(); outline-SetInputConnection(v16-GetOutputPort(); vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper:New(); outlineMapper-SetInputConnection(outline-GetOutputPort(); vtkActor* outlineActor = vtkActor:New(); outlineActor
21、-SetMapper( outlineMapper);,vtkWidgetWindowLevelCallback* cbk = vtkWidgetWindowLevelCallback:New(); cbk-WidgetX = planeWidgetX; cbk-WidgetY = planeWidgetY; cbk-WidgetZ = planeWidgetZ; / planeWidgetX-AddObserver( vtkCommand:EndWindowLevelEvent, cbk ); /planeWidgetY-AddObserver( vtkCommand:EndWindowLe
22、velEvent, cbk ); /planeWidgetZ-AddObserver( vtkCommand:EndWindowLevelEvent, cbk ); cbk-Delete();,vtkImageMapToColors* colorMap1 = vtkImageMapToColors:New(); colorMap1-PassAlphaToOutputOff(); colorMap1-SetActiveComponent(0); colorMap1-SetOutputFormatToLuminance(); colorMap1-SetInput(planeWidgetX-GetR
23、esliceOutput(); colorMap1-SetLookupTable(planeWidgetX-GetLookupTable(); vtkImageActor* imageActor1 = vtkImageActor:New(); imageActor1-PickableOff(); imageActor1-SetInput(colorMap1-GetOutput();,ren-AddActor( outlineActor); ren1-AddActor( imageActor1); ren2-AddActor( imageActor2); ren3-AddActor( image
24、Actor3); ren-SetBackground( 0.1, 0.1, 0.2); ren1-SetBackground( 0.1, 0.2, 0.1); ren2-SetBackground( 0.2, 0.1, 0.2); ren3-SetBackground( 0.2, 0.2, 0.2); renWin-SetSize( 600, 400); ren-SetViewport(0,0.5,0.5,1); ren1-SetViewport(0.5,0.5,1,1); ren2-SetViewport(0,0,0.5,0.5); ren3-SetViewport(0.5,0,1,0.5)
25、; renWin-Render();,ren-GetActiveCamera()-Elevation(110); ren-GetActiveCamera()-SetViewUp(0, 0, -1); ren-GetActiveCamera()-Azimuth(45); ren-GetActiveCamera()-Dolly(1.15); ren-ResetCameraClippingRange(); iren-Initialize(); iren-Start(); renWin-Render(); iren-SetKeyCode(z); iren-InvokeEvent(vtkCommand:CharEvent,NULL); iren-SetKeyCode(z); iren-InvokeEvent(vtkCommand:CharEvent,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁匠波尔卡教学设计小学音乐一年级下册人音版(主编:曹理)
- 高中数学 2.1.1 倾斜角与斜率教学设计 新人教A版选择性必修第一册
- 人教版地理八上第六章第1节《北方地区的自然特征与农业》教学设计
- 主题四河涌治理现绿水(第一课时)教学设计广州版初中劳动技术八年级下册
- 人教版二年级下册第四单元五十六朵花编创小羊过桥教案设计
- 人教版高中政治必修四8.2《用发展的观点看问题》教学设计
- 校园分类垃圾箱(教学设计)三年级下册综合实践活动沪科黔科版
- 工商业储能电站火灾风险专项评估报告模板 中文版(热失控隐患排查及消防管控方案)
- 计算基础与智能 4
- 暖胃的鸡葱糙米粥 教案-2025-2026学年高一上学期劳动技术
- 矿井机电业务保安管理制度
- 湖南洲煌商贸有限公司内部会计监督制度优化设计
- 孕前检查培训
- (正式版)DB62∕T 5121-2025 《公路红砂岩填筑路基应用技术规范》
- 大学课程设计介绍
- 2025年排污许可证租赁代理协议
- 午睡疏散应急预案
- 贵州省遵义市2025-2026学年高三上学期高考10月考试英语试卷
- 湖南省西学中结业考试题目及答案
- (正式版)DB15∕T 967-2025 《林木育苗技术规程》
- 信誉楼服务意识课件
评论
0/150
提交评论