VTK基础学习
VTK能做什么?
三维计算机图形、图像处理及可视化是VTK主要的应用方向。通过VTK可以将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。
VTK的特点
-
强大的三维图形功能。VTK既支持基于体素的体绘制(Voxel-Based Volume Rendering),又保留了传统的面绘制(Surface Rendering),从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
-
VTK的体系结构使其具有非常好的流Streaming和高速缓存Caching的能力,在处理大量的数据时不必考虑内存资源的限制。
-
VTK能够更好的支持基于网络的工具,比如Java和VRML。随着Web和Internet技术的发展,VTK有着很好的发展前景。
-
能够支持多种着色,如OpenGL等。
-
VTK具有设备无关性,使其代码具有良好的可移植性。
-
VTK中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。
-
VTK具有丰富的数据类型,支持对多种数据类型进行处理。
VTK的结构
VTK库的框架结构是什么样的?
VTK是在三维函数库OpenGL的基础上,采用面向对象的设计方法发展起来的。
它有2种不同的方式:图形模型
和可视化模型
,
图形模型如图所示,利用了3D图形系统简单易用的特点,同时也采用了图形用户接口(GUI)的方法。
整个图形模型表现了3D图形系统的本质特征,主要有9类基本objects
- Render master(渲染控制器)定义与设备无关的坐标计算方法,创建渲染窗口;
- render window(渲染窗口) 管理显示设备上的窗口,一个或多个绘制方法可在渲染窗口上创建一个场景;渲染窗口是用户图形界面,其中包括了设置渲染窗口的大小,产生立体显示效果等方法:
- Renderer(渲染器) 是管理光源照相机和绘制对象等的位置、属性等,提供了世界坐标系,观察坐标系及显示坐标系之间的转换;
- Lights(灯光) 可在场景中照亮绘制对象,可通过调用参数改变控制灯光的状态、照射角度、照射强度、颜色等,
并支持点光源和平行光源。 - Camera(照相机) 是定义观察者的位置、聚焦点和其他有关属性,参数可由调用者根据需要设置。
- Actor(角色) 代表渲染场景中的绘制对象实体,通过参数调节可以设置角色的位置、方向、渲染特性、引用、纹理影射等属性,并可对角色进行缩放。
- Property(属性) 是说明几何物体的一些特性,实现三维图形真实感。
- Transform(变换) 是一个放置4×4变换矩阵的堆栈,可以进行各种操作。图形模型支持3D几何数据绘制、3D体数据绘制、2D几何文字、图像绘制。
- Mapper(映射、制图人) 指定了渲染数据和图形库中基本图元之间的联系,一个或多个角色可以使用相同的映射,有多个参数对其进行控制。
可视化模型
摄像头属性表示如下:The clipping planes are used to eliminate data either too close to the camera or too far away. As a result only actors or portions of actors within the clipping planes are (potentially) visible。前后切面的位置可以通过摄像头的clipping range进行设置。
摄像头围绕焦点的运动有三种方式,如下图所示
可视化系统中包括三种坐标系统:模型坐标系统,世界坐标,显示坐标,视图坐标。四者关系如下图所示:
视图坐标系表示摄像头的可见部分,显示坐标系与view坐标是使用相同的基,但是没有限制-1到1,且坐标表示实际的x,y的像素位置。世界坐标系是Actor所在的位置坐标。模型坐标系是模型定义的笛卡尔坐标。
VTK绘制管线(运行机制)
VTK采用的是Pipeline(管线)运行机制
,几乎可以对任何类型的数据进行处理,并提供了许多相应的类对各种类型的数据进行转换或处理。
VTK对体数据进行可视化的步骤: Source-> Filter -> Mapper -> Actor -> Render
1. 按照所要处理的原始数据类型的不同选择不同的类。 vtkObiect
是Visualization Toolkit类库
的基类,它为整个可视化流程提供基本的方法, vtkSource
是vtkObiect
的派生类和vtkFilter
的父类,它为整个可视化流程的开始比如读取数据等定义具体的行为和接口;
2. 过滤器接收数据源中的数据,进行各种不同的过滤操作。 vtkFilter
是vtkSource
的派生类,它对数据进行各种处理,将原始数据经过各种过滤器的处理后,转换为可以直接用某种算法模块对其进行处理的形式;
3. 映射是将处理过的适当数据形式映射为几何数据。 vtkMapper
也是vtkObiect
的派生类,它将经过各种filter
处理后的应用数据映射为几何数据,为原始数据与图像数据之间定义了接口。
4. 角色将可视化的数据在窗口中表现出来,在Visualization Toolkit
中任何可视化的数据都是通过角色在窗口中表现出来的。
vtkActor类用来表达绘制场景 中的一个实体,它通过SetMappe()
方法将几何数据的属性告诉角色
5. 最后通Actor
通过vtkRender
类将结果在窗口中显示出来。