vtk中文向导

vtk中文向导

2023年6月30日发(作者:)

基于VTK User Guide和VTK Textbook学习

Vtk user guide

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

HOW TO USE VTK

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

ADDITION RESOURCES

The Visualization Toolkt An Object-Oriented Approach to 3D Graphics(2rd

Edition):该书详细描述了VTK中的多个算法,数据结构等。

/:提供有在线手册,FAQ和用户邮件列表等

/VTK/doc/nightly/html:在线VTK文档

/vtk/:Sebastien Barre的网站

Installation

Windows

直接下载安装文件,执行

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

vtkNNCore:用于Windows的VTK DLL

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

vtkNNTcl:用于Tcl的文件和库

vtkNNJava::用于Java的文件和库

vtknnPython::用于Python的文件和库

CMake:从源码构建VTK的工具

源码安装

System Overview

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

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

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

The Graphics Model

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

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

矩阵线性数据Rectilinear Grid: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维索引数据到文理的映射Texture Coordinate,n*n矩阵Tensor,阵列数据vtkFieldArray,其中每一列可以是不同类型的数据。

Cell:是点的拓扑组织,构成数据集的基本形式,用作点之间的插值信息。

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

-------- -------- --------- --------

|Source | |Filter | |Filter N | |Mapper |

| |--- | |--- | |---| |---------Graphics Interface

|Data Object | |Data Ojbect | |Data Object | | |

-------- -------- --------- --------

源Source对象:通过读取文件或重构数据对象产生数据。

过滤器Filter:将输入数据处理后生成新的数据,其中输入或输出数据可以单个,或多个Source object

绘图器Mapper:位于图形模型中,将数据转成图形数据(可由图形引擎渲染)

Writer:是一种Mapper,可以将数据写入文件或输出流中。

1. 管道拓扑:使用方法aFilter->SetInput(anotherFilter->GetOutPut());的不同变体来构成。多输入和多输出时类似。

2. 控制管道执行的机制:仅执行必须更新的部分,使用懒惰赋值方法Lazy

evaluation(当数据被请求时才求值)。

3. 管道组装:必须满足前后两级滤波器的输出与输入兼容。(这对于编译型语言可以在编译时检查,解释型则会到运行时出错)

4. 管道执行:决定数据是否缓存或保留。这对于系统性能至关重要。VTK使用引用计数方法确定数据对象的生存期,并提供方法关启数据缓存或截取流数据片段。

VTK学习笔记4–管道执行 (2007-05-22 10:44:00)

Pipeline Execution

<——————————–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 to Render„n";}

};

通常在Execute中无需处理调用者对象。如用,则可以用类型重塑方法

vtkRenderer::SafeDownCast(caller)。

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

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

VTK学习笔记6--事件管理 (2007-05-22 10:41:17)

源数据对象:程序源对象Procedural Source Object和阅读器源对象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不再有效。

/

VTK学习笔记8--灯源控制 (2007-05-22 10:38:08)

vtkLight:方向光

常用方法:

SetColor:设置RGB颜色

SetFocalPoint:设置焦点

SetPosition:设置位置

绘制器vtkRender::AddLight()方法加入灯源。

通常来说灯源的焦点和位置设置成相机一样,即头灯。

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

/

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轴旋转--在从原点恢复--平移

来源:/

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。

Related posts:

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688109258a82870.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信