VTK 学习笔记

VTK 是什么

VTK,Visualization Tool Kit,可视化工具包。

VTK 是一个用于图像处理、三维图形、体绘制(通过模拟光线穿越半透明物体时的能量变化来绘制物体,即采用体光照模型对三维体数据场进行直接显示)、可视化的开源软件系统。

VTK 架构

VTK 库的框架结构

vtkObject -> vtkSource -> vtkFilter -> vtkMapper -> vtkActor -> vtkRenderer

vtkObject

vtkObject 是 VTK 库的基类,它为整个可视化流程提供基本的方法

vtkSource

vtkSource 是 vtkObject 的派生类和 vtkFilter 的父类,它为整个可视化流程的开始定义具体的行为和接口,比如读取数据

vtkFilter

vtkFilter 是 vtkSource 的派生类,对原始数据进行滤波器处理,转化成可以直接应用算法模块的形式

vtkMapper

vtkMapper 是 vtkObject 的派生类,它将 vtkFilter 处理后的应用数据映射为几何数据,相当于为原始数据和图像数据之间定义了接口

vtkActor

vtkActor 用来表示渲染场景下一个特定物体(几何结构和属性)

vtkRenderer

vtkRenderer 为渲染器提供一种抽象规范。渲染器控制场景物体渲染过程,渲染过程则是将物体的几何结构、光和摄像机视角转化到图片中。

最终 vtkActor 通过 vtkRenderer 类将结果在窗口中显示出来。

VTK 图形模型

VTK 图形模型是 3D 图形的抽象,整个图形模型表现了 3D 图形系统的本质特征,主要有 9 类基本对象:
渲染控制器、渲染窗口、渲染器、灯光、摄像机、角色、特性、映射、变换

渲染控制器

渲染控制器(Render master)定义与设备无关的坐标计算方法,创建渲染窗口;

渲染窗口

渲染窗口(render window)管理显示设备上的窗口,一个或多个绘制方法可在渲染窗口上创建一个场景;渲染窗口是用户图形界面,其中包括了设置渲染窗口的大小,产生立体显示效果等方法

渲染器

渲染器(Renderer)是管理光源照相机和绘制对象等的位置、属性等,提供了世界坐标系,观察坐标系及显示坐标系之间的转换

灯光

灯光(Lights)可在场景中照亮绘制对象,可通过调用参数改变控制灯光的状态、照射角度、照射强度、颜色等,并支持点光源和平行光源

摄像机

摄像机(Camera)是定义观察者的位置、聚焦点和其他有关属性,参数可由调用者根据需要设置

角色

角色(Actor)代表渲染场景中的绘制对象实体,通过参数调节可以设置角色的位置、方向、渲染特性、引用、纹理映射等属性,并可对角色进行缩放。

特性

特性(Property)是说明几何物体的一些特性,实现三维图形真实感

映射

映射(Mapper、制图人)制定了渲染数据和图形库中基本图元之间的联系,一个或多个角色可以使用相同的映射,由多个参数对其进行控制。

变换

变换(Transform)是一个放置 4x4 变换矩阵的堆栈,可以进行各种操作。图形模型支持 3D 几何数据绘制、2D几何文字、图像绘制

VTK 运行机制

VTK 采用 Pipeline 运行机制,其可视化运行机制如下:

Source -> Filter -> Mapper -> Actor -> Renderer

VTK 案例-箭头和锥体

案例1: 箭头

import vtk

# 数据源:箭头
arrow_source = vtk.vtkArrowSource()
# 映射器
mapper = vtk.vtkPolyDataMapper()
# 映射器添加数据源
mapper.SetInputConnection(arrow_source.GetOutputPort())
# 演员
actor = vtk.vtkActor()
# 演员添加映射器
actor.SetMapper(mapper)
# 绘制器
ren = vtk.vtkRenderer()
# 绘制器添加演员
ren.AddActor(actor)
# 绘制窗口
renWin = vtk.vtkRenderWindow()
# 绘制窗口添加绘制器
renWin.AddRenderer(ren)
# 窗口读取绘制器生成的图形
renWin.Render()
# 创建窗口交互器
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
iren.Initialize()
iren.Start()

案例2:锥体

import vtk
# VTK
# 数据源 resource:
cone = vtk.vtkConeSource()
# 映射器 mapper:
coneMapper = vtk.vtkPolyDataMapper()
# 映射器添加数据源:
coneMapper.SetInputConnection( cone.GetOutputPort() )
# 演员 actor:
coneActor = vtk.vtkActor()
# 演员添加映射器:
coneActor.SetMapper( coneMapper )
# 绘制器 renderer:
renderer = vtk.vtkRenderer()
# 绘制器添加演员:
renderer.AddActor( coneActor )
# 绘制窗口 win:
renWin = vtk.vtkRenderWindow()
# 绘制窗口添加绘制器:
renWin.AddRenderer( renderer )
# 窗口读取绘制器生成的图形:
renWin.Render()
# 交互器 i_ren:
i_ren = vtk.vtkRenderWindowInteractor()
# 交互器添加渲染窗口
i_ren.SetRenderWindow(renWin)
# 交互器初始化:
i_ren.Initialize()
# 交互器开启;
i_ren.Start()

VTK 编码逻辑

  1. 读取数据
  2. 滤波器处理数据
  3. 数据映射到图形
  4. 绘制对象
  5. 将各个绘制对象与场景组装渲染
  6. 创建渲染窗口
  7. 交互控制

参考链接:

  1. https://blog.csdn.net/u012437564/article/details/50109605
  2. https://blog.csdn.net/varyshare/article/details/89853796

你可能感兴趣的:(VTK学习,VTK)