基于VTK User Guide和VTK Textbook学习

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         |        |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。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值