Vtk userguide

组织:分为三部分,parti通用介绍,如VTK安装方法;part ii是核心部分,提供了大量的示例;partiii介绍高级应用,如何创建自己的类。

HOW TO USEVTK

vtk创建者和应用者。创建或修改必须熟悉C++,并且知悉VTK的编程约定;对于应用者可以从TCL,PYTHON,VB,JAVA,VC等中选择自己熟悉的语言,但需熟悉VTK的对象接口及其关系。

ADDITIONRESOURCES

The Visualization ToolktAn Object-Oriented Approach to 3D Graphics(2rdEdition):该书详细描述了VTK中的多个算法,数据结构等。

http://public.kitware.com/:提供有在线手册,FAQ和用户邮件列表等

http://public.kitware.com/VTK/doc/nightly/html:在线VTK文档

http://www.barre.nom.fr/vtk/links.html:SebastienBarre的网站

Installation

Windows

直接下载安装文件,执行setup.exe

安装后文件包含5个部分:

vtkNNCore:用于Windows的VTKDLL

vtkNNCpp:用于VC++的文件和库

vtkNNTcl:用于Tcl的文件和库

vtkNNJava::用于Java的文件和库

vtknnPython::用于Python的文件和库

CMake:从源码构建VTK的工具

源码安装

SystemOverview

对于VTK的系统的概述:介绍基本系统概念和对象模型抽象

VTK由两个基本子系统构成:已编译C++类库和已解释的封装器用于其他语言,如Tcl,java,Python等

VTK本身是基于OO模型构建的,因此仅需理解主要对象就可以构建应用系统:图形模型GraphicsModel和可视化模型Visualization Model

The GraphicsModel

下面是一些常用的核心对象:

vtkActor, vtkActor2D,vtkVolume--vtkProp和/或vtkProp3D的子类

vtkLight--灯光

vtkCamera--镜头,照相机

vtkProperty,vtkProperty2D--

vtkMapper,vtkMapper2D--vtkAbstractMapper的子类

vtkTransform--

vtkLookupTable,vtkColorTransferFunction--vtkScalarsToColors的子类

vtkRender

vtkRenderWindow

vtkRenderWindowInteractor

可以通过对上述对象的组合形成场景Scene。

Props表示在场景所见到的物体。三维场景中的通常是vtkProp3D对象,如vtkActor,vtkVolume等;二维场景中的则通常是vtkActor2D对象。

Props不能直接表示其几何形状,通过其相关的mappers表示。

Props还可以通过属性对象控制其外观,如颜色,灯光,绘制方式等。

Actors和Volumes具备内部转换对象vtkTransform,其封装了4*4的变换矩阵,可以调整其几何参数(位置,朝向和缩放)。

灯光vtkLight对象用于设置场景中的灯源,只能用于3D场景。

相机对象vtkCamera控制3D物体如何投影成2D图形。只在3D场景有必要设置。可以控制几何参数以及投影方式:正交投影和透视投影。

绘图器vtkMapper对象以及相关的查找表vtkLookupTable对象用于变换和绘制几何图形。mapper提供了可视化管道和图形模型之间的接口。

渲染器vtkRenders对象和渲染窗口vtkRenderWindow对象用于管理图形引擎和计算机视窗系统之间的接口。一个渲染窗口可以同时支持多个渲染器。渲染器作图的区域即为视口viewport。

场景交互可以通过vtkRenderWindowInteractor对象完成。操作相机,拾取物体,激活用户定义的方法,进入或退出透视投影以及设置actors的某些属性。

上述描述的类通常都有特殊行为的子类,如vtkAssembly,vtkFollower,vtkLODActor均是vtkActor的子类。vtkAssembly允许层次式组织actors;vtkFollwer是一个总是面向指定相机的actor,尤其对于文本和广告显示是十分有用的;vtkLODActor是允许改变角色actors的几何表示的actor

图像数据ImageData:vtkImageData

矩阵线性数据RectilinearGrid:vtkRectilinearGrid,其数据组织形式是行列方向线性增长

结构化数据vtkStructuredGrid,无结构化数据点,多边形数据vtkPolyData,无结构化栅格数据vtkUnstructuredGrid

图形管道的作用是将图形数据转换成图片。可视化管道的作用是将信息转换成图形数据。换句话说,就是可视化管道是用于构造几何表达,而后经由图形管道渲染。
VTK使用数据流的形式转换,其中涉及两个基本对象:vtkDataObject和vtkProcessObject。

DataObject数据对象:
   表示不同类型的数据。数据的组织形式由vtkDataSet对象表示。由几何和拓扑结构(点和穴)组成。

DataSet数据集:图像数据ImageData:vtkImageData
矩阵线性数据Rectilinear Grid:vtkRectilinearGrid,其数据组织形式是行列方向线性增长
结构化数据vtkStructuredGrid,无结构化数据点,多边形数据vtkPolyData,无结构化栅格数据vtkUnstructuredGrid

属性数据:单个数据Scalar,3D方向和幅度Vector:(u, v,w);3D方向Normal:(nx, ny, nz), |n|=1,n维索引数据到文理的映射TextureCoordinate,n*n矩阵Tensor,阵列数据vtkFieldArray,其中每一列可以是不同类型的数据。
Cell:是点的拓扑组织,构成数据集的基本形式,用作点之间的插值信息。

处理对象vtkProcessObject:也称作过滤器,滤波器,将已有数据处理形成新的数据。代表了系统所用的算法。Process和数据对象连接在一起形成可视化管道,即数据流网络。

--------         --------          ---------         --------
|Source         |        |Filter        |          |Filter   N       |        |Mapper       |
|                 |--- |                |---  |                  |---|              |---------Graphics Interface
|DataObject   |         |Data Ojbect  |           |DataObject    |         |               |
--------          --------          ---------         --------
源Source对象:通过读取文件或重构数据对象产生数据。
过滤器Filter:将输入数据处理后生成新的数据,其中输入或输出数据可以单个,或多个Source object
绘图器Mapper:位于图形模型中,将数据转成图形数据(可由图形引擎渲染)
Writer:是一种Mapper,可以将数据写入文件或输出流中。

  1. 管道拓扑:使用方法aFilter->SetInput(anotherFilter->GetOutPut());的不同变体来构成。多输入和多输出时类似。
  2. 控制管道执行的机制:仅执行必须更新的部分,使用懒惰赋值方法Lazyevaluation(当数据被请求时才求值)。
  3. 管道组装:必须满足前后两级滤波器的输出与输入兼容。(这对于编译型语言可以在编译时检查,解释型则会到运行时出错)
  4. 管道执行:决定数据是否缓存或保留。这对于系统性能至关重要。VTK使用引用计数方法确定数据对象的生存期,并提供方法关启数据缓存或截取流数据片段。
VTK学习笔记4--管道执行 (2007-05-22 10:44:00)
   
  PipelineExecution
<--------------------------------Update()方法的方向--------------------------------------------------
Source--->Filter---->Mapper------>Actor<-------------Render()
-------------------------------数据生成方向------------------------------------------->
通常不需手动激活Update()方法:滤波器是嵌入在可视化管道内
其中的Render方法经常用于初始化数据请求

Image Processing
VTK中2D和3D数据都称作vtkImageData。
图像数据对象是一个规则的,轴向组织的数组。
处理对象Process在管道中总是输入和输出图像数据对象。
体绘制使用3D vtkImageData
几乎所有的处理对象在图像管道中都是多线程的,且有能力分段处理流数据(满足用户指定的内存限制)。
滤波器可以自动感知系统中的有效处理器的数目,并在执行过程中创建多线程,以及自动分割数据成片段。

VTK学习笔记5--创建应用程序 (2007-05-22 10:42:16)
   
Create An Application

User Methods, Observers, and Commands

Callback/User method:在VTK中使用Subject/Observer和Command设计模式。
vtkObject中的每个子类都具有AddObserver()方法,可以用于设置观察者--捕获对象的事件。

在其示例Examples程序中有不同语言的示例。

回调函数:
myCallback:public vtkCommand{
   static myCallback *New() {return new myCallback;}
   virtual void Execute(vtkObject *caller, unsigned long, void*callData){ cerr << "Starting toRender...n";}
};
通常在Execute中无需处理调用者对象。如用,则可以用类型重塑方法vtkRenderer::SafeDownCast(caller)。

不同语言之间的切换比较直接,因为类名和方法名称都是相同的,不同的只是不同语言的语法。

VTK设计流程:读取、产生数据--过滤--渲染--交互

VTK学习笔记6--事件管理 (2007-05-22 10:41:17)
   
源数据对象:程序源对象Procedural SourceObject和阅读器源对象Reader Source Object

Procedural Source Object:

Reader Source Object:

vtkRenderWindowInteractor:控制相机camera和角色actor;两种交互模式:位置joystick和移动trackball。
Interactor可以支持同一窗口中的多个渲染器。
默认的按键:
j/t:开关控制joystick(位置)和trackball(移动)
c/a:开关控制camera(相机)和actor(对象)模式
Button1:旋转相机,沿着focal point;或角色actor,沿着其原点
Button2:摇摄相机或平移角色
Button3:缩放相机或角色
3:开关控制场景立体模式。对于配备水晶眼LCD立体眼睛,需要激活SetStereoTypeToCrystalEyes()
e:退出应用程序
f:设定当前光标位置为焦点focal point
p:执行拾取操作。基于vtkPropPicker对象。
r:沿着当前视向复位相机。将actors移到中心位置,移动相机确保所有角色可见。
s:改变所有角色的表示成surfaces。
u:激活用户自定义的方法。
w:改变所有角色的表示成wireframe。
可以自定义自己的类或者重新覆盖这些默认的行为。
默认行为还具备激活灯源的作用,LightFollowCameraOn()方法使灯源和相机的位置与焦点同步,默认为头灯headlight。

Interactor Styles
两种截然不同的方法控制交互方式。
一、使用vtkInteractorStyle的子类对象。使用vtkRenderWindowInteractor::SetInteractorSytle(vtkInteractorSytleFlight::New())
二、直接管理事件循环。在Linux中可以使用vtkmm与GTKMM合成使用,必须基于gtkglextmm组件。

VTK学习笔记7--数据过滤、相机控制 (2007-05-22 10:40:15)
   
过滤器使用SetInput()和GetOutput()方法进行设置。
如对于数据缩小滤波器可以使用vtkShrinkPolyData。
其中输入源必须与输出源类型兼容,但即使不兼容,可视化管道也能维持运行。

3D场景中会默认设定相机和灯光。

初始化相机

vtkCamera* cam1 = vtkCamera::New();
cam1->SetClippingRange(0.0475572,2.337786);              //参数分别为沿着视向的近、远剪切面的距离
cam1->SetFocalPoint(0.052665, -0.129454,-0.0573973);     //焦点:世界坐标系,控制相机方向
cam1->SetPosition(0.327637, -0.116299,-0.256418);        //位置:世界坐标系,设置相机位置
cam1->ComputeViewPlaneNormal();                          //重置视平面法向,基于当前的位置和焦点。否则会出现斜推剪切效果
cam1->SetViewUp(-0.0225386, 0.999137,0.034901);        //设置相机的“上”方向
ren1->SetActiveCamera(cam1);                             //设置渲染器的相机

设置已有的相机
cam1 =ren1->GetActiveCamera();                         //获取渲染器的相机
cam1->Zoom(1.4);                                            //放大相机,通过改变视角(SetViewAngle()),
另外,也可以使用Dolly()方法沿着视平面法向移动相机,实现放大或缩小可见角色物体。
基于焦点,使用Azimuth()和Elevation()方法设置相机的方位角和高度角/仰角(度,degree)[球坐标系统]。
注意其中在南极和北极存在奇异点,即视向量平行于视平面法向。此时可以使用OrthogonalizeViewUp()方法强制其正交。但这会改变相机坐标系统。

正交投影vs透视投影
vtkCamera::ParallelProjectionOn()开启平行/正交投影。此时需通过SetParallelScale()方法控制角色物体的缩放。Zoom不再有效。

http://shenaodong.blogchina.com/viewdiary.15515438.html

VTK学习笔记8--灯源控制 (2007-05-22 10:38:08)
   
vtkLight:方向光
常用方法:
SetColor:设置RGB颜色
SetFocalPoint:设置焦点
SetPosition:设置位置

绘制器vtkRender::AddLight()方法加入灯源。
通常来说灯源的焦点和位置设置成相机一样,即头灯。

点光源设置:使用PositionalOn()方法,同时使用SetConeAngle()方法设置其覆盖范围,如设为180则无点源效果。

http://shenaodong.blogchina.com/viewdiary.15515463.html

VTK学习笔记9--Prop控制 (2007-05-22 10:35:56)
   
vtkProp3D是3D场景中props的抽象父类,其支持缩放,平移和旋转几何变换。
vtkActor是通过几何图元构成的prop,如多边形和直线等。

SetPositon(x, y,z)--设置在世界坐标系中的位置
AddPosition(delaX, deltaY,deltaZ)--平移,沿着各个轴
RotateX(theta),RotateY(theta), RotateZ(theta)--分别沿着三个轴旋转角度,单位为度degree
SetOrientation(x, y,z)--设置方向,先绕z轴旋转,而后是x轴,而后是y轴
AddOrientation(a1, a2,a3)--增加方向量
RotateWXYZ(theta, x, y,z)--沿着给定的(x,y,z)向量旋转theata角度
Scale(sx, sy,sz)--缩放
SetOrigin(x, y,z)--指定prop的原点。该点是作为其旋转和缩放的参考点。

重点是要注意其中的变换顺序,顺序不同结果会不同。在VTK中,其变换顺序是:
先平移到原点--缩放--绕Y轴旋转--绕X轴旋转--绕Z轴旋转--在从原点恢复--平移

来源:http://shenaodong.blogchina.com/viewdiary.15515615.html

vtk学习笔记11--Picking拾取 (2007-05-22 10:35:15)
   
Pick拾取是很普通的可视化任务。vtk中根据当前的光标位置激活vtkAbstracPicker对象的Pick()方法。
其返回的内容根据拾取的类型而定,可能是最简单的全局坐标,或者是穴,单元格,点,参数坐标,vtkProp,组装路径等。
拾取语法:Pick(SelectionX,selectionY, selectionZ,Renderer)其中Renderer中的actor都有可能被选择。
通常,selectionZ设置成0.0。当然,典型的用法是不必直接调用上述方法,而是通过vtkRenderWindowInteractor管理拾取操作。
VTK学习笔记10--Actor角色/演员 (2007-05-22 10:31:18)
标签:科学   
 vtkActor是vtkProp3D的一个可以实作的子类,提供渲染的属性,如表面属性[环境,漫反射,镜面反射颜色等],表示[面或线框],纹理映射,几何体定义[mapper]等。
定义几何体:演员的几何形状是由SetMapper()方法确定。如
vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
mapper->setInput(aFilter->GetOutput());
vtkActor* actor = vtkActor::New();
actor->SetMapper(mapper);
上述的mapper使用分析图元如点,线,多边形和三角面片绘制几何体。mapper是可视化管道的终点,也是可视化管道和图形管道的桥梁。
ACTOR Properties:演员提供vtkProperty的实例,其控制actor的表现、外观。
具体有颜色,表示[点,线框,面],光影模式[平面,Gouraud],透明度[相对透明度],环境,漫反射,镜面反射颜色等。
Actor color:其分量值为[0,1]
可以使用SetColor()直接设定;也可以分别设定环境,漫反射,镜面反射颜色。
注意:颜色设置仅当actor的mapper中没有标量数据时才有效。默认mapper输入标量数据颜色设置actor时,actor的颜色被忽略。
可以通过忽略标量数据ScalarVisibilityOff()方法。
透明度设置:需要考虑渲染顺序。可以使用深度排序滤波器vtkDepthSortPolyData沿着视向将多边形排序。
组装:可以使用vtkAssembly将多个部件组装后形成一个新的整体。AddPart()方法加入新的部分(actor演员)。其中组装体不能设置属性,必须尤其部分设定。
Volumes:vtkVolume用于体绘制。类似于vtkActor。其相关的属性对象类型为vtkVolumeProperty。

基于VTK User Guide和VTK Textbook学习相关推荐

  1. VTK教程系列:VTK基础及应用开发教程

    由于OpenCV不能使用,只能使用VTK库的图像处理库,暂时还没有找到其他可以全面替代的库: CSDN东灵工作室:http://blog.csdn.net/www_doling_net/article ...

  2. 《基于张量网络的机器学习入门》学习笔记7

    <基于张量网络的机器学习入门>学习笔记7 量子算法 什么是量子算法 三个经典量子算法 Grover算法 背景 基本原理 例题 量子算法 什么是量子算法 例如我们求解一个问题,一个111千克 ...

  3. 《基于张量网络的机器学习入门》学习笔记6

    <基于张量网络的机器学习入门>学习笔记6 密度算符(密度矩阵) 具体到坐标表象 在纯态上 在混合态上 纯态下的密度算符 混合态下的密度算符 密度算符的性质 量子力学性质的密度算符描述 第一 ...

  4. 《基于张量网络的机器学习入门》学习笔记5

    <基于张量网络的机器学习入门>学习笔记5 量子概率体系 事件 互斥事件 概率与测量 不相容属性对 相容属性对 量子概率与经典概率的区别 量子测量 量子概率体系 我们将经典的实数概率扩展到复 ...

  5. 《基于张量网络的机器学习入门》学习笔记4

    <基于张量网络的机器学习入门>学习笔记4 量子概率 将概率复数化 分布与向量的表示 事件与Hilbert空间 不兼容属性及其复数概率表示 为什么一定要复数概率 量子概率 将概率复数化 在经 ...

  6. 图形处理(十三)基于可变形模板的三维人脸重建-学习笔记

    基于可变形模板的三维人脸重建-学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50331423 作者:hjimce 一.数据库处理: 我们通 ...

  7. 基于Anaconda安装GPU版PyTorch深度学习开发环境

    基于Anaconda安装GPU版PyTorch深度学习开发环境 1 安装Anaconda 2 安装GPU计算驱动 2.1 检查是否有合适的GPU 2.2 下载CUDA和cuDNN 2.3 安装CUDA ...

  8. 基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...

    每个人都习惯使用Python去完成机器学习和深度学习的工作,但是对于习惯于某种特定语言的人来说,转型不是那么容易的事.这两年我花了不少时间在Python,毕竟工作的重心也从移动开发转为机器学习和深度学 ...

  9. 利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境

    每个人都习惯使用Python去完成机器学习和深度学习的工作,但是对于习惯于某种特定语言的人来说,转型不是那么容易的事.这两年我花了不少时间在Python,毕竟工作的重心也从移动开发转为机器学习和深度学 ...

最新文章

  1. oracle 管道化表函数(Pipelined Table) [转]
  2. 04 Websocket和Websocketed
  3. 手把手教你C语言静态库的开发
  4. ob服务器维修视频,教你如何使用OB系统 还在看转播?你OUT了!
  5. CH - 0802 占卜DIY(简单模拟,水题)
  6. 【设计模式 06】原型模式(克隆??)
  7. 黑马商城项目源代码_Python学习路线图--Python框架与项目
  8. 海底捞员工:假笑到脸僵,撑到经理月入20万
  9. 前端框架 Bootstrap 5.0 alpha 发布
  10. 无法连接到WMI提供程序。你没有权限或者该服务器无访问
  11. 企业级NFS网络文件共享服务
  12. Adaptive AutoSAR第四版发布大规模应用
  13. matlab生成vcf,从VCF文件中提取样本数据
  14. 数据从网卡到应用的过程
  15. 如何让电脑计算机d盘布局,创建MSR分区,解决“由于用户电脑存在一个不支持的用于UEFI固件的硬盘布局,因此系统无法安装”...
  16. SpringMVC学习-helloSpringMVC
  17. 人员离职it检查_经典的it公司员工离职报告范文
  18. 打印 上一主题 下一主题 简单讲解UEFI及MBR,及UEFI系统安装引导修复
  19. EasyRecovery 15 mac中文免费密钥数据恢复 安装软件的方法教程及版本对比
  20. 前端面试题精选(3)

热门文章

  1. 昆曲,古琴,苏州评弹
  2. 我的未来规划最新版本
  3. 【转】TCP、UDP数据包大小的限制
  4. 如何利用手持终端信息化仓储管理呢
  5. 如何进行云主机迁移?看这一篇文章就够了!
  6. 《Unity虚拟现实开发实战》——第1章,第1.8节小结
  7. DataSourceUtils(使用C3P0连接池的工具类)
  8. 在表空间有足够free space的情况下出现ORA-1652
  9. 查询shared_pool主要部分的使用率
  10. PHPRPC for PHP