VTK 简介

VTK基础教程(1)- vtkPolyData 介绍 目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-优快云博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客. 阅读详情
AI摘要

本文介绍了VTK,一个开源的可视化工具包,详细阐述了其概念、功能、框架结构、数据结构和可视化流程,强调了其面向对象设计、管线设计思想和广泛的应用领域。

VTK 简介

什么是 VTK?

VTK,全称是Visualization Toolkit,即可视化工具包。是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。

VTK 独立于系统的图形界面接口(GUI),可方便的嵌入到其他的相关软件中。同时开发人员可以基于 VTK 独立的基础类库开发自己的库函数,拓展 VTK 的应用范围。

VTK 采用面向对象思想,基于 OpenGL 开发出目标函数库。它将将一些常用的算法封装为类的形式,用户在开发过程中可以直接调用其函数库进行开发,而不必纠结函数内部具体的实现过程。

其优点主要有:

  1. 拓展 OpenGL:VTK 不仅封装了 OpenGL 复杂的底层环境代码,而且提供了常用功能和算法处理,如常见的图形建模算法和图像处理算法。继承OpenGL 状态机的优势,保留了其可视化工具的特色,使得开发人员秩序关注高级功能的实现,而不必纠结其细枝末节。
  2. 管线设计思想:VTK 相对于其他的可视化工具包,如 Direct3D、OpenGL 等的主要区别就在于采用管线(Pipeline)设计来实现可视化流程,这种设计可以节省设计与开发时间,加快测量系统的研发速度。
  3. 开发方便:VTK 采用面向对象的设计思想来实现其管线流程的,在其可视化的流程中,各阶段的数据在管线中都是以类和对象的形式进行调用,增强程序可读性,便于开发与拓展。

VTK最早是作为Prentice Hall在1993年出版的《The Visualization Toolkit: An Object-Oriented Approach to 3D Graphics》一书的附件出现的。该书及相应的VTK软件由美国GE公司的三位研究人员:Ken Martin、Will Schroeder和Bill Lorensen用其闲暇时间合作编著与开发的,因此该软件的授权完全由这三位决定。由于其开放源码式的授权,该书一上市后,很快就建立起VTK的使用者及开发者社区交流平台,同时GE(特别是GE医疗系统)与其他数家公司也开始提供对VTK的支持。1998年,Will Schroeder和Ken Martin离开GE创立了Kitware公司(http://www.kitware.com)。有了Kitware的资金支持,VTK社区快速地成长,其在学术研究及商业应用领域都受到重用,例如Slicer生物医学计算软件使用VTK作为其核心,许多讨论研究VTK的IEEE论文出现。VTK也是许多大型研究机构,如Sandia,Los Alamos及Livermore国家实验室与Kitware的合作基础,这些研究中心使用VTK作为数据可视化处理工具。VTK同时也是美国国家卫生研究院(National Institutes of Health,NIH)创立的美国国家医学影像计算合作联盟(National Alliance for Medical Image Computing,NA-MIC,http://www.na-mic.org)的关键计算工具。

VTK 能做什么?

三维计算机图形、图像处理及可视化是VTK主要的应用方向。通过VTK可以将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。

VTK包含一个C++类库,众多的翻译接口层,包括Tcl/Tk,Java,Python。VTK是在三维函数库OpenGL的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。比如VTK将我们在表面重建中比较常见的MarchingCubes算法进行封装,以类的形式供用户使用,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写MarchingCubes算法的代码,而直接使用VTK中已经提供的vtkMarchingCubes类。

VTK是给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具。它具有如下特点:

  1. 具有强大的三维图形功能。VTK既支持基于体素的体绘制(Voxel-BasedVolume Rendering),又保留了传统的面绘制(SurfaceRendering),从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
  2. VTK的体系结构使其具有非常好的流streaming和高速缓存caching的能力,在处理大量的数据时不必考虑内存资源的限制。
  3. VTK能够更好的支持基于网络的工具,比如Java和VRML。随着Web和Internet技术的发展,VTK有着很好的发展前景。
  4. 能够支持多种着色,如OpenGL等。
  5. VTK具有设备无关性,使其代码具有良好的可移植性。
  6. VTK中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。
  7. VTK具有更丰富的数据类型,支持对多种数据类型进行处理。
  8. VTK的跨平台特性方便了各类用户。

VTK 的基本组成

VTK 包含图形图像处理与可视化领域内的上百种算法,支持跨平台,可在 Java、C/C++、Tcl/Tk 与 Python 等高级编程语言环境下使用。

VTK 由两大部分构成,其核心层(Compiled Core,C++类库)是基于 C/C++语言编写的,上层部分是依据特定规则编写的支持脚本语言(如 Java、Tcl/Tk 与 Python)的解释层(Interpreted Interface),如下图所示:

在这里插入图片描述

在 VTK 编译层中,VTK 其它的类或相关程序可调用集成了图像处理相关数据结构与算法的 C++对象。解释层部分是脚本语言与编译后的 VTK 动态链接库进行绑定而生成的相应解释型语言的接口。这种结构既保持解释性语言代码的特性,又可用C/C++语言编写相关的算法来进行拓展应用,很大程度上提高了开发效率。

VTK 的拥有特别庞大的类库,可根据各个类在类库中的具体作用将各类分成如下模块:图像处理模块(Imaging)、文件读写模块(IO Interface)、图形处理模块(Graphics)、绘制模块(Rendering)、公共模块(Common)、数据转换模(Filtering),每个模块被编译成相应的动态连接库。

各模块层次如下所示:

在这里插入图片描述

VTK 的框架结构

VTK 的框架结构如下图所示,类似于 MFC 中的 CObject 基类,vtkObject 是VTK 的基类,为可视化流程提供了基本的方法。vtkSource 是分别是 vtkObject、vtkFilter的派生类与父类,为整个可视化流程(如数据读取等)定义具体的行为与接口,经过vtkFilter 处理后的数据,可转化为直接用特定算法模块进行处理的形式。vtkObject的另一派生类是 vtkMapper,它将 vtkFilter 处理后的数据映射为几何数据形式,为原始数据与图像数据之间提供接口。任何可视化的数据都需要绑定 vtkActor 演示对象,在 vtkRender 类的渲染下,最终显示在屏幕的窗口中。

在这里插入图片描述

VTK 的数据结构

VTK 作为一个封装良好的可视化工具包,有其独特的数据结构和数据类型。

对于初始的测量数据,VTK 使用数据流(DataFlow)的方式将其变换成图形数据,这种方法的对象包括流程对象与数据对象,具体将在下节介绍。而对于已具有几何结构、拓扑结构及相关属性(如误差、测量值等)的数据被称作数据集(DataSet)。

在 VTK 的数据集中,与拓扑结构、几何结构及相关属性相对应的是点(Point)、单元格(Cell)、属性(Property)对象。 数据集由多边形数据结构(Polygonal Data)、不规则网格(Unstructured Grid)及规则网格(Structured Grid)组成。在进行三维图形的重构中,对于有规律的点可以用相应的规则网格或多边形数据结构来表示,而用不规则网格表示其他没有规律的散乱点数据。此外,VTK 还为常见图形提供快速绘制的接口,叫做图形源对象 Source。对于立方体、球面、圆柱(锥)等图形都有 Source 对象,Source 对象封装了数据结构中的几何结构和拓扑结构,将图形对象的特点作为属性接口面向开发人员。

在这里插入图片描述

VTK 的可视化流程

VTK采用的是管线(Pipeline)运行机制,几乎可以对任何类型的数据进行处理,并提供了许多相应的类对各种类型的数据进行转换或处理。

根据所要处理的原始数据类型和所使用的算法以及所要达到的结果的不同,可以设计自己的可视化流程,并由此选择不同的数据处理和转换的类,用数据通道将这些类连接起来,将原始数据类型转换为所采用的算法模块可以直接进行处理的数据类型,最终得到我们所需要的可视化的结果。所有的类和算法模块都是可扩充的,用户可以将自己开发的类或模块转换成系统可以接受的形式,并可替换或扩充原有的类,因此,VTK是一个开放的系统,可以扩展到任何应用领域。

图形模型与可视化模型的结合构成了 VTK 的可视化管线。

可视化模型主要用来对拟合后的数据进行处理,生成可被VTK绘制的几何形体,它包括处理对象(vtkProcessObject)与数据对象(vtkDataObject)。数据对象用于表达各种类型的数据,处理对象作用于过滤器(Filter),被用来对数据对象进行相关操作并产生新的数据对象。

图形模型主要对生成的几何体进行绘制,包括相机(vtkCamera)、映射器(vtkMapper)、对象属性(vtkProperty)、灯光(vtkLight)、渲染器(vtkRenderer)、演示对象(vtkActor)及渲染窗口(vtkRenderWindows)。

在 VTK 管线中的数据流两个基本的对象:流程对象(Process Object)与数据对象(Data Object)。

  • 数据对象的数据类型有许多,其父类为 vtkDataSet 类,数据结构有标准的格式。VTK 支持的数据类型有:结构网格(vtkStructureGrid)、结构点(vtkStructurePoint)、多边形数据(vtkPolyData)、非结构网格(vtkUnStructureGrid)及非结构点(vtkUnStructurePoint)等。

  • 流程对象运用数据的系统级运算法则对数据对象进行操作用来生成新的数据对象。流程对象根据其作用可分为映射对象(Mapper)、过滤器对象(Filter)以及源对象(Source)。

VTK 的可视化流程是流程对象与数据对象的结合:

在这里插入图片描述

Source 对象的数据既可以是已知读入的,也可是程序运算得到。过滤器(Filter)将经过 Source 对象处理后数据对象(Data Object)进行处理来生成新的数据对象。新生成的数据对象进入映射器(Mapper),将三维数据映射成几何图像,然后绑定到演示对象(Actor),此时用户可以设置演示对象的属性(如文本、颜色等)。渲染器(Renderer)在设置灯光(Light)与相机(Camera)等属性后,将演示对象添加到绘制器窗口(RenderWindow)对三维体进行绘制与显示。交互器(RenderWindowInteractor)可为演示对象提供人机交互(如缩放、旋转、文本显示等)。

VTK 运行机制:

在这里插入图片描述

参考

  1. 维基百科介绍:http://en.wikipedia.org/wiki/VTK
  2. 百度百科介绍:https://baike.baidu.com/item/vtk
  3. https://blog.youkuaiyun.com/weixin_42291376/article/details/106810026
  4. https://blog.youkuaiyun.com/Littlehero_121/article/details/125842269
VTK使用指南:介绍 本章讨论了开发大型和/或复杂软件系统的一些问题,并描述了面向对象设计如何解决其中的许多问题。本章定义了面向对象建模和设计中使用的关键术语,并通过一个真实世界的例子进行了工作。本章最后简要介绍了一些面向对象的语言以及与面向对象可视化相关的一些问题。 阅读详情

相关推荐

VTK修炼之道1_初识VTK

1.VTK是什么? Visualization ToolKit 3D计算机图形学、图象处理及可视化工具包 VTK使用C++、面向对象技术开发;基于OpenGL,封装了OpenGL中的功能,屏蔽细节、便于交互、易于使用提供多种语言接口C++ 、Java 、Tcl、 Python 等;可在Windows 98/NT, SGI, Linux,  Sun, HP等系统编译

沈春旭的博客 1万+

VTK 基本介绍

VTK(Visualization Toolkit)是 Kitware 公司发布的开源免费软件系统,受到国内外高等院校与科研机构的欢迎,广泛地应用于计算机图形学、图像处理与三维可视化等领域。VTK 独立于系统的图形界面接口(GUI),可方便的嵌入到其他的相关软件中。同时开发人员可以基于 VTK 独立的基础类库开发自己的库函数,拓展 VTK 的应用范围。 VTK 采用面向对象思想,基于 OpenGL 开发出目标函数库。它将将一些常用的算法封装为类的形式,用户在开发过程中可以直接调...

钢铁男儿 2万+

人工智能100问☞第5问:什么是AI三要素?

人工智能的核心三要素是​​数据、算法和算力​​,分别作为AI的“燃料”、“大脑”和“动力”,三者协同驱动智能系统的学习、推理与决策能力。

bjdx_001的博客 1991

VTK修行之相见恨晚

开启我的VTK之路

保持分享欲 2344

高通CamX架构解析(一)——核心组件与数据流设计

本文深入解析高通CamX相机架构的核心组件与数据流设计。CamX采用模块化与数据驱动思想,将复杂处理流程拆解为Node、Pipeline、Session等独立组件,并通过CHI层实现硬件接口与定制功能的分离。文章详细阐述了从请求下发到结果返回的完整数据流,并提供了实用的调试与分析指南,帮助开发者理解这一高效、灵活的现代相机架构。

k8l9m0n的博客 235

[PayPal报错]为遵守国际法规,这笔交易已被拒绝。

PayPal报错解决:为遵守国际法规,这笔交易已被拒绝。

qq_39906413的博客 1万+

VTK简介

VTK(Visualization Toolkit)是一款用于二次开发的开源的可视化工具包,在世界上同类产品中最有影响,基本上可以作为可视化领域的规范。VTK 的历史和现状:1993 年12月,GE的Will Schroeder, Ken Martin 两个人写了一本书: The Visualization Toolkit:An Object-Oriented Approach to 3D G

GISSTAR的专栏 2962

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8970

VTK简介及安装

VTK简介VTK(Visualization ToolKit)是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D计算机图形,图像处理,可视化。VTK包含一个c++类库,众多的翻译接口层,包括Tcl/Tk,Java,Python。 Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库OpenGL 的基础上采

SunStone的小屋 2494

微信小程序转化数据API自归因实战:PHP实现与2025升级要点解析

本文详细解析了2025年微信小程序转化数据API自归因的升级要点与PHP实战实现。核心变化包括接口地址更新、固定access_token的获取方式,以及新增timestamp与nonce等安全参数。文章提供了完整的PHP代码示例,帮助开发者高效完成数据上报,优化腾讯广告投放效果。

git9versioner的博客 989

华为硬件工程师笔试题

1、基尔霍夫定理的内容是什么?(仕兰微电子)   基尔霍夫定理包括电流定律和电压定律。   电流定律(KCL):在集总电路中,任何时刻,对任一结点,所有流出结点的支路电流的代数和恒等于零。   电压定律(KVL):在集总电路中,任何时刻,沿任一回路,所有支路电压的代数和恒等于零。   2、平板电容公式(C=εS/4πkd)。(未知)   3、最基本的如三极管曲线特性。(未知)   4、描述反馈电路...

weixin_33717117的博客 2万+

本专栏及VTK简介

VTK学习简介

xillee388366的专栏 1039

十一、增强现实

那都是n年前的老版本了,新版本完全没有这个问题,我就是纠结这个问题,搭建若干环境,又是vmware虚拟机,又是msys2,又是anaconda,又是找机器,折腾了几天,结果通通不是。以一张实际卡片为锚点,通过笔记本的摄像头,在显示器上将一个计算机内的3d物体显示在卡片上,类似于电影上看到的那种全息投影技术;如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择。

3188

VTK笔记——Widgets简介

VTK的交互器样式(vtkInteractorStyle)通常只是控制相机以及提供一些简单的键盘和鼠标事件的交互技术。交互器样式在渲染场景中并没有一种表达形式,也就是说,在交互时我们看不见交互器样式到底是什么样子的,用户在使用这些交互器样式时,必须事先知道哪些键盘和鼠标事件是控制哪些操作的。然而,渲染场景中的大部分操作都需要直接、简单。比如,如果某条线段的端点可以由用户放置的话,那么沿着某条线段改变倾斜度,就变得非常容易。

Andy的专栏 4192

使用Mask2Former和X-Decoder训练自定义数据集及结果复现报告

本报告记录了使用MMDetection框架中的Mask2Former和X-Decoder模型在自定义数据集上的训练过程。报告包含环境配置、数据集准备、模型训练与优化(解决了Mask2Former的PQ值异常问题)、性能评估等关键环节。详细展示了从数据集转换(将客户提供的COCO格式数据适配MMDetection框架)、配置文件修改、到最终模型训练和评估的全流程。特别针对Mask2Former训练中的PQ值异常问题提供了解决方案,并对比了两种模型在自定义数据集上的表现。报告还包含完整的代码实现和技术细节。

huanghm88的专栏 1094

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VTK简介及教程

VTK Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。 Vtk几乎可以在任何一个基于Unix的平台上操作,以及Windows 95/98/NT/2000/XP。 视觉化工具函式库(VTK,Visualization

心向阳光,斗志昂扬! 3584

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

第00章 VTK库简介

VTK是一个功能强大且灵活的库,适用于各种科学数据可视化任务。它的模块化设计和丰富的功能集使得开发者可以轻松处理复杂的可视化需求。通过理解VTK的系统架构和工作流程,开发者可以更高效地利用VTK进行科学数据可视化和处理。

捕鲸叉的专栏 1734

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 进程、线程、协程
下一篇: FFmpeg 详解
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值