当前位置: 首页 > news >正文

QT传输函数控件设计1 引子

这又是一个系列的开头。

说实话本来我想先写写关于QT三维物体显示的功能的,因为后面也会遇到。但是鉴于有些朋友表示急需使用关于渲染的传输函数控件,这里我就先把这个传输函数控件搞定,然后再来写一下怎么实现小三维模型显示和交互。

老规矩:各位务必放心,本人开坑必填,预计一周内填完此坑。

各位注意了,我之前写的关于xml文件读写,以及QT图形图像显示的系列内容都是为这个来做铺垫。以前讲过的这两个系列的内容大部分我是不会再讲了,各位如果有看不懂的函数可以自己百度,也可以去看完我的这两个系列,相信你一定会有收获。而且就算您的需求不是做这么一个控件,相信学完这个博客也能加深对QT程序设计的理解。

哦对了,提一句,xml文件读写系列的《XML语言数据读写理解8》一直到《XML语言数据读写理解16》,这部分内容都是在做这个传输函数控件。里面的内容也都是跟设置传输函数控件读写类有关的,大家务必注意到这一点。也就是说我们开始做的内容是从《XML语言数据读写理解16》已经完成的内容开始的。

现在的情况是:我们已经有了xml文件读写类,其中最底层是节点读取类,然后是TsfunItem读取类,最后是根节点TsfunGroup读取类,用来调用低层次的类来实现读取整个记载了传输函数控件的xml文件的类。

我们要实现通过移动绘图面板上的图元,来实现定义修改传输函数节点的例子。

现在我再来说说几句,给之前不了解传输函数控件的人讲一下我们要做个什么东西。

首先我们有这个一个xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<TsfunGroup>
	<TsfunItem Name="normalMode">
		<Nodes>
			<Node>
				<NormalizedIntensity Value="0"/>
				<Opacity Value="0"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.23597"/>
				<Opacity Value="0"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.288538"/>
				<Opacity Value="0.0179028"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.288578"/>
				<Opacity Value="0.563501"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.35417"/>
				<Opacity Value="1"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="1"/>
				<Opacity Value="1"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
		</Nodes>
		<DensityScale Value="100"/>
		<ShadingType Value="2"/>
		<GradientFactor Value="3"/>
	</TsfunItem>
	<TsfunItem Name="maxMode">
		<Nodes>
			<Node>
				<NormalizedIntensity Value="0"/>
				<Opacity Value="0"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.13597"/>
				<Opacity Value="0"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.188538"/>
				<Opacity Value="0.0279028"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.288578"/>
				<Opacity Value="0.363502"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="0.45417"/>
				<Opacity Value="1"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
			<Node>
				<NormalizedIntensity Value="1"/>
				<Opacity Value="1"/>
				<Emission G="0" R="0" B="0"/>
			</Node>
		</Nodes>
		<DensityScale Value="100"/>
		<ShadingType Value="2"/>
		<GradientFactor Value="3"/>
	</TsfunItem>
</TsfunGroup>

然后我们要做一个界面:

注意图中的6个节点,对应了上面xml文件的6个Node,然后,我们可以在底下自己选择节点,实现对单个节点的修改,通过设置diffuse,specular以及emission,我们可以设置参数。为了简单我们就不加diffuse和specular了,只保留一个emission。然后是opacity,intensity表示这个点的横纵坐标(从0—1映射到图中的-1000—3095)

绘制图元的场景上有格子,以及背景是一个曲线图,曲线图是干嘛用的,我们以后再慢慢解释。面板底下有三个长矩形,用来对应表示上面的各个节点之间不同的颜色之间的混合过渡形成的混合颜色,没看懂没关系,这个的作用以后我们也会慢慢解释。

这是软件exposureRender的传输函数效果。现在你们什么都不需要知道,你们只需要知道,通过我们设置不同的节点,我们可以显示不同的效果。

那我们下一节就进入正题,开始讲一下VTK与体渲染显示。大家放心,这个我只讲一节,充其量就是给大家一个模板程序,我们要实现可以通过自己设置传输函数来显示不同效果的医学图像三维可视化系统。

相关文章:

  • QT传输函数控件设计2 体渲染和VTK
  • QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
  • QT传输函数控件设计4 接着进行融合
  • QT传输函数控件设计5 显示体渲染效果
  • QT传输函数控件设计6 设计Dock窗体结构
  • QT传输函数控件设计7 边界和布局规划
  • QT传输函数控件设计8 设计小圆点
  • QT传输函数控件设计9 初步设计视口类
  • QT传输函数控件设计10 包含小圆点的图形项
  • QT传输函数控件设计11 包含小圆点的图形项2
  • QT传输函数控件设计12 自定义信号和槽
  • QT传输函数控件设计13 大结局
  • QT三维图形1
  • QT三维图形2
  • QT三维图形3
  • Angular 响应式表单 基础例子
  • javascript 总结(常用工具类的封装)
  • Java程序员幽默爆笑锦集
  • JS变量作用域
  • Linux gpio口使用方法
  • Lucene解析 - 基本概念
  • nodejs实现webservice问题总结
  • 从零开始的无人驾驶 1
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端
  • 前端之Sass/Scss实战笔记
  • 使用common-codec进行md5加密
  • 手写一个CommonJS打包工具(一)
  • 走向全栈之MongoDB的使用
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​Java并发新构件之Exchanger
  • # Panda3d 碰撞检测系统介绍
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (转)大型网站的系统架构
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net 4.0发布后不能正常显示图片问题
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net 按比例显示图片的缩略图
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • 。Net下Windows服务程序开发疑惑
  • @SuppressWarnings注解
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [100天算法】-目标和(day 79)
  • [Android] Implementation vs API dependency
  • [CF543A]/[CF544C]Writing Code
  • [CSS]CSS 字体属性
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  • [HDU3710]Battle over Cities
  • [Jenkins] Docker 安装Jenkins及迁移流程
  • [LeetCode]-283. 移动零-1089. 复写零
  • [linux] Key is stored in legacy trusted.gpg keyring
  • [linux运维] 利用zabbix监控linux高危命令并发送告警(基于Zabbix 6)
  • [Prism]Composite Application Guidance for WPF(9)——命令