本文主要是介绍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传输函数控件设计1 引子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!