使用Qt Creator开发VTK

原文链接:http://blog.csdn.net/numit/article/details/10200507

VTK应用系列:非常强大!非常善良

05-VTK在图像处理中的应用(1)

原文链接:http://blog.csdn.net/www_doling_net/article/details/8541534

VTK概述

原文链接:http://blog.csdn.net/numit/article/details/11619069

VTK(visualization toolkit),直译为可视化工具包,主要用于医学图像重建,带有部分图像处理功能。属于科学性数据分析三维成像的函数库。

1.1   vtk历史:

VTK最早是作为Prentice Hall出版的"TheVisualization Toolkit: An Object-Oriented Approach to 3DGraphics"一书的附件释出,该书及其软件是由奇异研发部Corporate R&D的三位研究人员:WillSchroeder、Ken Martin与Bill Lorensen用其闲暇时间合作。主要用于三维计算机图形学、图像处理和可视化。

1.2   vtk简介:

Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。

虽然vtk被NA-Mic(美国国家医学影像计算联盟)列为关键计算工具,vtk在医学核试验的研究中也起到重大作用,但是vtk也运用于其他领域,地理信息,建筑学,气象学,航空航天等领域的逼真三维效果图的实现也都能用vtk解决。

1.3  与其他三维引擎对比:

vtk 更加灵活,封装了c++和OpenGL的代码,简化编程。当vtk需要精确实现曲面时也需要用到OpenGL及c++完善效果。和其他三维引擎绘图不同的是更加注重对数据分析处理后的可视化,而osg,ogre等都是基于场景的绘制。Vtk主要用于科学计算可视化领域,osg主要用于虚拟现实领域。

2 vtk流程

vtk模式是基于pipeline设计模式,流线型执行数据流。

Two segment:可视化管线和图形化管线

可视化管线:source->[多个filter]形象的说是数据在可视化管线中流动,然后用图显示出数据信息。数据以原始的形式变换成图元形式(vtk内部定义的数据结构,形成数据集)最后以图形形式表现。

图形化管线:actor(prop对象的子类)->render->renderWindow->renderWindowInteractor

可视化管线输出的是可被绘制的几何体,图形模型主要是对几何体进行绘制,需要一个接口将两个管线连接起来,就是mapper对象。

4  vtk简单对象

vtk的数据处理方式将数据分为数据对象和处理对象。

其中源对象、过滤器对象(可选)、映射器对象 、绘制器对象、绘制窗口为处理对象, Props对象为数据对象(vtk中数据都是由数据对象表示的,数据对象是数据的集合),映射器对象是可视化模型和图形模型的接口。

1、源对象

数据生成的源头,数据来源主要包括从磁盘读取数据文件,如VTK所支持的各种格式文件生成数据源对象,这种源对象被称为读源对象,或者利用数学方法生成源对象,如利用多个四边形构建一个圆柱体,这种对象被称为程序源对象。

2、过滤器对象

对源对象进行处理,生成新的数据集输出。

3、映射器对象

映射器对象主要作用是将可视化模型生成的数据转换到图形模型进行绘制,或者以磁盘文件的形式进行输出。

5  演示例子


    #include<vtkSmartPointer.h>
#include<vtkCylinderSource.h>
#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkProperty.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
int main(int, char *[])
{
vtkSmartPointer<vtkCylinderSource>source =
vtkSmartPointer<vtkCylinderSource>::New();//创建一个source对象
source->SetResolution(16); //设置source属性
source->Update(); vtkSmartPointer<vtkPolyDataMapper>mapper =
vtkSmartPointer<vtkPolyDataMapper>::New(); //创建映射对象
mapper->SetInputConnection(source->GetOutputPort()); //将source的流出变成mapper的流入 vtkSmartPointer<vtkActor>cylinder =
vtkSmartPointer<vtkActor>::New(); //创建一个演员对象
cylinder->SetMapper(mapper); //设置演员对象的属性
cylinder->SetPosition(10,2,4);
cylinder->GetProperty()->SetColor(1,1,0);
cylinder->RotateWXYZ(30,1,1,1); vtkSmartPointer<vtkRenderer>render = //创建渲染对象
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renwin = //创建渲染窗口
vtkSmartPointer<vtkRenderWindow>::New();
renwin->AddRenderer(render); //在渲染窗口添加渲染场景。一个窗口可以添加多个场景
vtkSmartPointer<vtkRenderWindowInteractor>iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
render->AddActor(cylinder); //在渲染对象上添加actor或其他prop(比如相机,光照) iren->SetRenderWindow(renwin); //将渲染窗口设置交互属性对象 renwin->Render(); //启动渲染
iren->Start(); //启动交互
returnEXIT_SUCCESS; }

6   vtk可视化执行管线的解释

首先数据流执行的原则是上游对象输出的数据类型和下游对象输入的数据类型要一致,注意输入输出数据之间的匹配问题,如果不一致,执行管线就不能正常运行。

构建好可视化管线后,构成可视化管线的各个对象对数据的处理过程,成为可视化管线的执行,当管线中的过程对象或数据发生改变时,可视化管线都要重新执行,为了保证管线的执行效率,管线在执行过程中必须保持处理对象的同步,VTK采用隐式执行的方式保持同步。

隐式执行包含两个互逆的过程:

1.      Execute():source->filter->mapper

当可视化管线中的对象创建时间发生改变,表示对象已经更新了,这时执行了execute()

2.      update(): mapper-->filter->source

当renderWindowàRender()发出绘制请求,actor对象将绘制信息给mapper,管线开始执行,然后mapper、filter、source对象依次调用upDate()方法,源对象调用了update()方法后,开始比较当前修改时间和最后执行时间,如果当前被修改的时间比最后执行的时间新,则执行execute(),filter对象和mapper对象比较他们的修改时间和最后执行的时间,根据比较结果看是否需要调用execute()。

VTK资料收集的更多相关文章

  1. JDBC连接MySQL 方法 实例及资料收集

    JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...

  2. Android 学习资料收集

    收集整理这份资料灵感来自于 trip_to_iOS, 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, ...

  3. 关于 Graph Convolutional Networks 资料收集

    关于 Graph Convolutional Networks 资料收集 1.  GRAPH CONVOLUTIONAL NETWORKS   ------ THOMAS KIPF, 30 SEPTE ...

  4. AssetBundle机制相关资料收集

    原地址:http://www.cnblogs.com/realtimepixels/p/3652075.html AssetBundle机制相关资料收集 最近网友通过网站搜索Unity3D在手机及其他 ...

  5. dubbo/dubbox部署资料收集

    dubbo/dubbox部署资料收集 最近由于项目需要要部署bubbox,dubbo,在找资料过程中用的的一些网址如下,后来由于取消没有实际应用,以备今后再用 http://dubbo.io/Admi ...

  6. [MOC062066]背景建模资料收集整理

    一.相关博客 背景建模相关资料收集,各个链接都已给出. 资料,不可能非常完整,以后不定期更新. -----------------切割线----------------- 这个哥们总结的非常好啊,看完 ...

  7. 免费开源 KiCad EDA 中文资料收集整理(2019-04-30)

    免费开源 KiCad EDA 中文资料收集整理 用 KiCad 也有一段时间了,为了方便自己查找,整理一下 KiCad 的中文资料,会不定期更新. 会收集KiCad 的新闻.元件封装库.应用技巧.开源 ...

  8. RequireJS 学习资料收集

    RequireJS 学习资料收集 RequireJS 模块化管理 Javascript 比较优秀. RequireJS 英文官网 https://requirejs.org/ RequireJS 中文 ...

  9. MEMS 硅麦资料收集

    MEMS 硅麦资料收集 PCM 和 I2S 协议的 MEMS Microphone PCM 协议在蓝牙方面比较多,一般都有 PCM 的接口. MEMS Microphone 更加的省电,更方便用于语音 ...

随机推荐

  1. codeforces 244B-Undoubtedly Lucky Numbers 搜索

    题意:给你一个n,求不大于n的并且仅由两种或者一种数字组成的数的个数.(有点绕,,简单点就是,看看小于等于n点数中,,有多少数字只有一种数字,或者有两种数字组成) “哎,自己还是太菜了,训练的时候只做 ...

  2. 06.系统编程-3.进程VS线程比较

    1.定义的不同 ==进程是系统进行资源分配和调度的一个独立单位.== ==线程是进程的一个实体,是CPU调度和分派的基本单位==,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只 ...

  3. JS移动客户端--触屏滑动事件及js手机拖拽效果

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  4. 1.IDEA的安装

    .1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

  5. WordPress 在Ubuntu下安装插件、主题输入FTP及无法创建目录的问题

    1.安装新主题.插件需要输入FTP的账户密码 如果不想输入的话可以使用在wp-config.php文件中添加脚本方式. define("FS_METHOD","direc ...

  6. SVN提示被锁定的解决方法(转)

    1.(常用)出现这个问题后使用“清理”即"Clean up"功能,如果还不行,就直接到上一级目录,再执行“清理”,然后再“更新”. 2.(没试过)有时候如果看到某个包里面的文件夹没 ...

  7. HDU 4515

    刷水完毕,年月日,日日日日日日日日日日日日日日日日日日 #include <stdio.h> ,,,,,,,,,,,,}; ,M = ,D = ; int leap(int y) { == ...

  8. FaceBook推出的Android图片载入库-Fresco

    欢迎关注ndroid-tech-frontier开源项目,定期翻译国外Android优质的技术.开源库.软件架构设计.測试等文章 原文链接:Introducing Fresco: A new imag ...

  9. redis(四))——多实例化——实现主从配置

    引言 redis是一个key-value存储系统. 和Memcached类似,它支持存储的value类型相对很多其它,包含string(字符串).list(链表).set(集合)和zset(有序集合) ...

  10. HDU 5308 I Wanna Become A 24-Point Master

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5308 题面: I Wanna Become A 24-Point Master Time Limit ...