一、vtk基本架构

Vtk是基于对象的系统,高效使用vtk的关键是深入理解使用的对象模型。这样做可以避免对系统种上百种种对象的错误理解。有了对对象模型的准确理解,将很容易对这些对象进行组合编写自己的应用程序。也需要知道系统中很多对象的能力(特性和方法),要知道这个必须看很多代码示例和在线文档。

Vtk系统两种主要的组成是可视化管线和渲染管线。可视化管线用于获取和产生数据、处理数据、把数据写入文件或传递给渲染引擎用于显示。渲染引擎负责生成数据的可视化表示。

1、渲染引擎

渲染引擎由负责处理可视化引擎的结果并在窗口上显示的类组成。常用主要包括下面的:vtkPop,vtkAbstractMapper,  vtkPropery和vtkVolumeProperty, vtkCamera, vtkLight, vtkRenderer, vtkRenderWindow,vtkRenderWindowInteractor, vtkTransform,vtkLookupTable, vtkColorTransferFunction和vtkPiecewiseFunction等。

场景中存在的数据的可见描述是vtkPop的子类,最常见的子类是用与展示3D对象的vtkActor(用于表示场景中数据的几何特征)和vtkVolume(用于表示场景中的体数据)。也有用于表示2D场中数据的vtkActor2D。vtkPop子类的通用职责是知道自己在场景中的位置、大小、方向。除了对位置的控制,它通常有个投影对象(mapper object)知道如何渲染(render),另外属性对象(property object)控制的参数有颜色和透明度等。

有超过50多种特定的props,比如vtkImageActor(用于展示image)和vtkPieChartActor(用于生成数组数据的饼状图表示)。一些特殊的props直接包括控制外观的参数,或者直接带有要渲染的输入数据的引用,因此这些props不需要设置属性对象(propery object)或投影对象(mapper object)。比如,vtkFollower是一种特殊的vtkActor子类,它能自动更新自己的方向,使得始终面向相机,很适用于在3D空间展示面板和文字。

2、可视化引擎

可视化引擎用于读取或生成数据、分析和处理数据、把数据写道文件或传递给渲染引擎进行显示。比如,可以从磁盘读取3D体数据,可以对它进行处理生成一组三角形表示数据体内的等值面,然后把这个几何数据写回磁盘,或者生成一组球体或圆柱体表示原子和棍子,把它们传递给渲染引擎用于显示。

Vtk利用数据流的方法把信息转化为图形数据,在这个过程中有两类基本的对象,分别是vtkDataObject和vtkAlgorithm。

数据对象vtkDataObject表示各类数据。vtkDataObject类通常被视作通用的“blob”数据。有正式结构的数据被称作数据集(vtkDataSet),数据集包括几何数据和拓扑结构(points 和cells),它也有相关的属性数据,包括标量和向量,属性数据可以依附于数据集的几何数据(points)和拓扑结构(cells)。拓扑结构Cells是几何数据点Points的拓扑组织,拓扑结构cells组成了数据集的原子(atoms)用于几何结构点(points)之间的信息插值。Vtk内支持的cell类型有74种,包括线性拓扑结构和非线性拓扑结构。

算法vtkAlgorithm,通常也称为过滤器(filter),用于操作数据对象并产生新大数据对象。算法和数据对象相互连接形成了可视化管线,也成为数据流网络。源算法(Source Algorithm)通过读取(reader objects)或构建(procedural source object)一个或多个数据对象,过滤器(filter)接收一个或多个数据对象并产生一个或多个输出对象。投射器Mapper(一些情况下,是特定的actor)获取filter处理后的数据把它转化一种可视化表示,然后再渲染引擎中显示。写出器(writer)可以理解为一种特殊的映射器(mapper),它把数据传递到文件或数据流。

图像处理(Image Processing).vtk支持大量的图像处理和三维渲染方法。在vtk中2D和3D图像数据(image)都被视作vtkImageData。在vtk中图像数据集(iamge dataset)是一种数据按照规则的、沿着坐标轴排列的矩阵。图像(Image)、像素图(pixmaps)和位图(bitmaps)是2D 图像数据集的例子,体数据(一组2D图像)时3D图像数据,比如三维地震数据。

图像处理的管线通常输入和输出图像数据集。因为数据的规则和简单特性,图像处理管线有一些其它的重要特性。体渲染(Volume Rendering)用于3D vktImageData的可视化,特殊的图像查看器可以查看2D vtkImageData。几乎所有的图像处理管线都是多线程的,可以按照用户给定的内存限制以数据片的形式处理数据。图像处理管线的过滤器能自动感知电脑的核数自动把数据分片利用多线程方式进行读取(vtkStreamingDemandDrivenPipline)。

对象众多,通过示例学习不同对象的特性和方法是很好的方法,如果直接看类的继承关系,很枯燥,而且理解。通过示例学习是必不可少的方法。

图形子系统用于显示各种形式的数据,包括多边形数据和体积(即定期采样的数据)。渲染系统由以下关键对象组成,这些关键对象组合到场景中以生成最终的三维显示。

vtkactor和vtkprop-要呈现在场景中的对象。一般来说,我们将这些对象称为“演员”,尽管vtkactor实际上是vtkprop的一个子类(就像在舞台上发现的“道具”)。

  • vtkamera-用于将演员从三维空间投影到二维图像的对象。
  • vtklight-用于照亮场景。
  • VTK属性-用于将材料(即照明)属性应用于演员。
  • vtkrenderer-这是显示渲染图像的对象。
  • vtkrenderwindow-一个或多个渲染器可以组合到渲染窗口中。

这种对象组织与电影/视频制作行业中我们许多人熟悉的“灯光、相机、演员”概念模型是一致的。请注意,许多其他对象都存在于幕后,例如转换矩阵(vtktransform)、交互程序(处理鼠标和键盘事件)和纹理映射(vtktexture)。请注意,在构建表单应用程序时,activiz.net系统将vtkrender和vtkrenderWindow组合为一个称为“renderwindowcontrol”的类。这是在Activiz应用程序中创建并嵌入到.NET程序中的表单。

一个重要的注意事项:vtkrenderWindowInteractor类是用于管理渲染窗口中鼠标和键盘事件的keystone类。通过交互风格(vtKinteratorObserver的子类),可以定制交互行为。默认情况下,交互程序支持以下绑定:

  • 鼠标左键-旋转摄像头
  • 鼠标中键-转换摄像头
  • 鼠标右键-放大/缩小
  • 键按下J键-进入操纵杆模式(鼠标向下键导致连续摄像机运动),退出轨迹球模式
  • 按键T-进入轨迹球模式(鼠标向下加上运动导致相机运动),退出操纵杆模式
  • 按键F-在演员上方按此键(在场景);相机焦点设置为拾取的位置,相机朝该点飞去。
  • 按键W-演员显示在线框中
  • 按键S-演员显示为表面
  • 按键R-重置相机,使所有可见的演员都出现在场景中。

除了这里描述的基本类之外,还有数百个类为VTK系统实现关键功能。这包括用于处理数据的过滤器、用于直接操作数据的交互小部件、图像处理、体积渲染、信息可视化、数学和计算几何(仅举几个例子)。以下示例演示了vtk的各种使用方法,以及如何在.NET框架中使用vtk。

VTK程序段落主要包含两个部分。一是数据和管道部分,二是角色和渲染部分。其工作的基本流程是“数据源Souce”--“过滤器Filter”-- “制图器Mapper”-- “角色Actor”--“渲染器Renderer”。 从对象和语言上看,VTK的类和方法实现简介,程序清晰,可读性好,这也是C#的特点。VTK对OpenGL进行了面向对象的封装,并设置了大量简单易用的默认值。

Vtk三维可视化学习笔记-1相关推荐

  1. R语言可视化学习笔记之相关矩阵可视化包ggcorrplot

    本文转载自"R语言中文社区",己获授权. 作者简介Introduction taoyan:伪码农,R语言爱好者,爱开源. 个人博客: https://ytlogos.github. ...

  2. R语言可视化学习笔记之ggridges包绘制山峦图

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源. 严涛老师的绘图教程还有: gganimate |诺奖文章里面的动图绘制教程来了!! ggplot2学习笔记之 ...

  3. Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]

    评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...

  4. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  5. 基于结构光的三维测量学习笔记

    基于结构光的三维测量学习笔记 1.几种比较成熟的方法 1.1飞行时间发 原理:通过直接测量光传播的时间,确定物体的面型.发射脉冲信号,接受发射回的光,计算距离. 精度:毫米级 优点:原理简单,可避免阴 ...

  6. 三维重构学习笔记(3):坚实的后盾 OpenCV3

    三维重构学习笔记(3):坚实的后盾+OpenCV3 前面两篇笔记分别记录了关于三维重构中,有关相机标定.SFM流程的问题.除了公式的推倒和理解,仿真时始终仰仗OpenCV3大法,为了以后学习使用方便, ...

  7. UE4蓝图制作三维弹球学习笔记(二)

    UE4蓝图制作三维弹球学习笔记(二) 1.BP_Fliper Viewport 使用Static Mesh导入Fliper. Construction 使用同一个蓝图表示左右不同的Fliper.在蓝图 ...

  8. UE4 蓝图制作三维弹球学习笔记(一)

    UE4 蓝图制作三维弹球学习笔记(一) 1.BP_PinBall Viewport 给小球Static Mesh作为根节点并添加模型,选中Simulate Physics增加物理特性.添加声音组件Au ...

  9. ECharts数据可视化学习笔记和应用

    ECharts数据可视化学习笔记和应用 一.概念 二.Echarts使用 使用步骤 三.Echarts-基础配置 四.柱状图图表1 五.柱状图图表2 六.折线图1 七.折线图2 八.饼状图1 九.饼形 ...

最新文章

  1. IsNull和IsEmpty的区别
  2. 如何在 Shell 脚本中执行语法检查调试模式
  3. c语言入门中冒泡排序的例题,选择排序和冒泡排序例题解析(c语言)
  4. 第四章:Spring AOP
  5. 《剑指offer》数组中出现次数超过一半的数字
  6. activemq nodejs stomp 重连机制_5分钟优劣分析 Kafka、RabbitMQ、RocketMQ、ActiveMQ消息队列...
  7. vscode 分支列表刷新_分钟将vscode撸成小霸王
  8. 安装rz_Centos 8下Mysql8的安装,以及远程Navicat适配(面向纯小白)
  9. stm08S单片机C语言编,STM8S单片机入门1(开发环境搭建)
  10. ASP.NET MVC5----了解我们使用的@HTML帮助类
  11. iStack详解(三)——iStack多主检测方式
  12. 高考340分理科学计算机,2021年高考340分可以上什么大学 340分左右的院校
  13. abaqus中python怎么建立参考点_怎么在abaqus中选定中心为参考点
  14. python+nodejs+vue大学生心理健康测评管理系统
  15. php智能文章相关性匹配,PHP中的Pearson相关性
  16. 清远机器人编程_清远宇舵机器人告诉你为什么少年儿童要学习机器人编程?
  17. 【Android Studio使用教程2】Android Studio创建项目
  18. “马赛克”真能去除了?老司机狂喜!这一神器一键去除!
  19. php新年计划,New Year’s Resolution |给20出头的你19条最赞的新年计划
  20. 多拨软件测试,虚拟机下多拨与OP下多拨测试

热门文章

  1. c语言斐波那契数列递归数组,c语言斐波那契数列递归法
  2. 景观效果图制作过程中选择适合的角度需要遵循的原则
  3. PCB Layout设计规范-通用篇
  4. 系统环境变量Path 被删除了 Win10的环境变量 PATH 列表显示:
  5. Hive数值计算函数
  6. 易语言取java路径模块,511遇见易语言API模块进程创建CreateProcess
  7. 电力系统中的定值区是什么意思
  8. PDF.js v2.4.456 (build: 228a591c) 信息:Failed to fetch
  9. 红米note2是android系统,如何精简红米Note2的系统软件
  10. 使用CNVkit进行CNV分析