vtk简单介绍、渲染流程、简单示例

一、vtk简单介绍

Vtk(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。

二、vtk渲染流程

流程图如下:

1.vtkSource 数据源

各个类型的图像原始数据。

2.vtkFilter 数据过滤器

对原始数据进行一些操作,转化成可以直接应用算法模块的形式。

3.vtkMapper 数据映射器

将不同的数据类型转换为图形数据,将 vtkFilter 处理后的应用数据映射为几何数据,相当于为原始数据和图像数据之间定义了接口。

vtkGPUVolumeRayCastMapper是一种用于体绘制(Volume Rendering)的mapper,可以将一组体数据(例如CT或MRI扫描数据)转换为渲染后的体绘制图像。该mapper基于GPU的体绘制技术,可以快速生成高质量的渲染图像。因此,它适用于渲染大规模体数据和实时渲染的情况。

vtkPolyDataMapper是一种用于多边形数据(PolyData)的mapper,可以将各种形状的多边形数据(例如点云、网格、曲面等)转换为渲染后的图像。该mapper基于CPU,适用于小规模的多边形数据渲染。

因此,当需要渲染大规模体数据或进行实时渲染时,应该选择vtkGPUVolumeRayCastMapper。而当需要渲染小规模多边形数据时,应该选择vtkPolyDataMapper。体数据和多边形数据是两种不同的数据类型,一般来说,如果你的数据是由像素或体素组成的三维图像,例如CT或MRI扫描数据,那么这就是体数据。而多边形数据则是由三角形、四边形等构成的表面网格数据,例如通过三维建模软件生成的模型。一般来说,体数据的扩展名可能是nii、dcm、mhd等,而多边形数据的扩展名可能是obj、stl、ply等。

4.vtkActor(演员)

执行渲染mapper的对象,用来表示渲染场景下的一个特定物体。

在VTK中,Actor是指将图形数据(例如三维模型、点云等)和其属性(例如颜色、透明度、材质等)结合起来,作为一个可渲染的单元。Actor可以看作是一个“演员”,将图形数据呈现在屏幕上。一个Actor可以包含多个Mapper,但只能有一个属性集合(vtkProperty)。

通过vtkActor,可以设置Actor的位置、旋转、缩放等变换属性,以及设置Actor的可见性、选择性、用户定义的数据等。Actor还可以使用vtkActor2D进行平面图像的显示。

在VTK中,Actor通常与Renderer一起使用,即在Renderer中添加Actor,并将Renderer添加到RenderWindow中进行显示。

5.vtkRender 渲染器

将vtkActor进行加入,用于渲染图像。渲染器控制场景物体渲染过程,渲染过程则是将物体的几何结构、光和摄像机视角转化到图片中。

6.vtkRenderWindow 渲染窗口

将vtkRender进行加入,用于显示成像的窗口。渲染窗口是用户图形界面。

7.vtkInteractor 交互器

用于获取渲染窗口上发生的鼠标,键盘事件,提供了独立于平台的与渲染窗口进行交互的机制

8.vtkProperty​​

修饰vtkActor的属性。

9.vtkCamer

定义视角,焦距,及场景的视觉属性。

10.vtkLight

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

三、示例

    //数据源:锥vtkSmartPointer<vtkArrowSource> Arrow = vtkSmartPointer<vtkArrowSource>::New();//映射器vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();//映射器添加数据源mapper->SetInputConnection(Arrow->GetOutputPort());//演员vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();//设置演员的属性actor->GetProperty()->SetColor(0,1,1);//演员添加映射器actor->SetMapper(mapper);//渲染器vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();//渲染器添加演员renderer->AddActor(actor);//渲染窗口vtkNew<vtkGenericOpenGLRenderWindow> renwindow;//渲染窗口添加渲染器renwindow->AddRenderer(renderer);//添加渲染窗口ui->vtk_widget->SetRenderWindow(renwindow.Get());

参考文章:

VTK 学习笔记_vtk光照模型-CSDN博客

vtk渲染_vtkrenderwindow_小卡kaka的博客-CSDN博客

VTK 基础(一) — 常用控件介绍及实现圆锥体绘制_wx61e8fd3af30f8的技术博客_51CTO博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多继承vs查看类结构

多继承里面的虚函数 类A有两个虚函数&#xff0c;类B重写了其中一个&#xff0c;类C重写了两个&#xff1b; 类C里面可以重写所有继承到的虚函数&#xff08;类A、类B里面的虚函数&#xff09; class A { public:virtual void init() { std::cout << "A init !&qu…

硬件成本节省60%,四川华迪基于OceanBase的健康大数据数仓建设实践

导语&#xff1a;本文为四川华迪数据计算平台使用 OceanBase 替代 Hadoop 的实践&#xff0c;验证了 OceanBase 在性能和存储成本方面的优势&#xff1a;节省了 60% 的硬件成本&#xff0c;并将运维工作大幅减少&#xff0c;从 Hadoop 海量组件中释放出来&#xff1b;一套系统处…

21天打卡掌握java基础操作

Java安装环境变量配置-day1 参考&#xff1a; https://www.runoob.com/w3cnote/windows10-java-setup.html 生成class文件 java21天打卡-day2 输入和输出 题目&#xff1a;设计一个程序&#xff0c;输入上次考试成绩&#xff08;int&#xff09;和本次考试成绩&#xff0…

如何用工业树莓派和MQTT平台打通OT和IT?

一、应用设备 OT端设备&#xff1a;步进电机&#xff0c;MODBUS TCP远程I/O模块&#xff0c;PLC设备 边缘侧设备&#xff1a;宏集工业树莓派&#xff1b; IT端设备&#xff1a;PC、安卓手机&#xff1b; IT端软件&#xff1a;宏集HiveMQ MQTT通信平台 二、原理 宏集工业树…

iOS 中,isa 指针

每个对象都有 isa 指针&#xff0c;指向对象所属的类。例如类 NSString 其实是类对象。 类对象产生于编译期&#xff0c;单例。 类对象有 isa 指针指向对应元类&#xff0c;元类&#xff08;metaclass&#xff09;中保存了创建类对象以及类方法所需的所有信息。 struct objc_…

react实现一维表格、键值对数据表格key value表格

UI画的需求很抽象&#xff0c;直接把数据铺开&#xff0c;不能直接用antd组件了 上一行是name&#xff0c;下一行是value&#xff0c;总数不定&#xff0c;最后前端还要显示求和 class OneDimensionTable extends React.Component { render() {const { data } this.props;le…

Linux安装node_exporter使用grafana进行服务器监控

文章目录 linux安装node_exporter修改node_exporter端口服务器安装grafana服务器安装prometheus将linux的noe_exporter配置到prometheus配置文件中导入linux服务器的模板,id: 16098常用exporter安装下载 linux安装node_exporter 要在CentOS 7.6.1810 (Core)上安装node_exporte…

网安顶刊IEEE Transactions on Dependable and Secure Computing

安全顶刊论文列表 写在最前面IEEE Transactions on Dependable and Secure ComputingTable of Contents&#xff08;March-April 2023&#xff09;Volume 20, Issue 2Table of Contents&#xff08;Sept.-Oct. 2023&#xff09;Volume 20, Issue 5 写在最前面 为了给自己找论文…

2023_Spark_实验十九:SparkStreaming入门案例

SparkStreaming入门案例 一、准备工作 二、任务分析 三、官网案例 四、开发NetWordCount 一、准备工作 实验环境&#xff1a;netcat 安装nc&#xff1a;yum install -y nc 二、任务分析 将nc作为服务器端&#xff0c;用户产生数据&#xff1b;启动sparkstreaming案例中的客户端…

NIO IN:技术蔚来的首次「大阅兵」

宝山&#xff0c;上海第一钢铁厂旧址。 上周&#xff0c;蔚来在这里点亮金色炉台&#xff0c;2500 立方米高炉&#xff0c;浓重的工业气质与古典凝重的光影交织&#xff0c;蔚来 NIO IN 用科技的进步呼应那个火红的年代。 这是蔚来第一次开科技发布会&#xff0c;为了全方位展…

通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

&#x1f525;博客主页&#xff1a; 小羊失眠啦 &#x1f516;系列专栏&#xff1a; C语言 、Cpolar、Linux ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 …

通讯协议学习之路:RS485协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序&…

HTTP 协议的基本格式(部分)

要想了解HTTP&#xff0c;得先知道什么是HTTP&#xff0c;那么HTTP是什么呢&#xff1f;HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。那什么是超文本呢&#xff1f;那就是除了文本&#xff0c;还有图片&#xff0c;声音&#xff0c;视频等。 …

『C++成长记』C++入门——命名空间缺省参数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、C的认识 &#x1f4d2;1.1什么是C &#x1f4d2;1.2C的发展 二、C关键字 三…

论文阅读之《Kindling the Darkness: A Practical Low-light Image Enhancer》

目录 摘要 介绍 已有方法回顾 普通方法 基于亮度的方法 基于深度学习的方法 基于图像去噪的方法 提出的方法 2.1 Layer Decomposition Net 2.2 Reflectance Restoration Net 2.3 Illumination Adjustment Net 实验结果 总结 Kindling the Darkness: A Practical L…

轮转数组------题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题解&#xff1a; 如果直接暴力双循环会时间超限&#xff0c;所以我选择了一个空间复杂度比较高的方法。直接再创建一个数组&#xff0c;然后对应位置替换&#xff0c;最后把值赋给原…

Spring framework Day24:定时任务

前言 在我们的日常生活和工作中&#xff0c;时间管理是一项至关重要的技能。随着各种复杂任务的增加和时间压力的不断增加&#xff0c;如何更好地分配和利用时间成为了一项迫切需要解决的问题。在这样的背景下&#xff0c;定时任务成为了一种非常有效的解决方案。 定时任务&a…

Kubernetes技术与架构-服务

从软件系统架构设计分层的角度看&#xff0c;Kubernetes的Service是基于Pod的上层&#xff0c;业务应用部署在Pod中&#xff0c;使用Service绑定Pod部署的应用&#xff0c;Service可以对外或者对上层提供服务&#xff0c;当Pod集群在系统调度的过程中发生弹性伸缩的时候&#x…

Python中的With ...as... 作用

Python中的with … as …作用&#xff1a; 1、通过with语句可以得到一个上下文管理器 2、执行对象 3、加载__enter__方法 4、加载__exit__方法 5、执行__enter__方法 6、as 可以得到enter的返回值 7、拿到对象执行相关操作 8、执行完了之后调用__exit__方法 9、如果遇到异常&a…

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

专栏集锦&#xff0c;赶紧收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https://blog.…