下面我们介入一个应用场景:也就是我们xml文件的应用:体渲染传输函数。

首先看一下效果:

这是从软件ExposureRender上截的图来显示的,左边的面板用来调节传输函数,右边来显示出效果。该程序的渲染是完全在GPU上实现的,我们因为重点在于制作和学习xml语言结构,所以就不使用GPU制作渲染引擎了,而是在VTK上显示。

现在我们首先来思考一下左边。左边其实是一个qt画板,可以在上面画一些东西,比如画线,画背景,画圆点等。这里的圆点对应了之前我们解析的文件里面的数值:Emission里面的RGBO,但首先我们最重要的任务是先把主要功能实现,再一点一点地思考怎么改善。

注意三个相邻圆点的关系:中间圆点不能滑动到超过左右两个圆点的地方,即:

这里一共有6个节点,最左和最右的两个节点不能水平移动,中间的节点,第2和第3个节点:第3个节点向左移动不能超过第二个节点,第四个节点向右移动不能超过第五个节点,同理第三和第四个节点也不能跨越到对方的另一边。这就是这四个节点是按顺序排列的。

所以,我们需要给节点安排一个最大值和最小值,即横轴的移动范围。第一个节点的横轴就固定在0了,最后一个节点的范围就固定在1了,中间的节点范围:第二个节点初始范围在第1个和第3个初始位置之间(禁止重合),第3个节点范围在第2个和第4个初始范围之间。当其中某个节点移动的时候,比如第4个节点移动了,那第3个节点和第5个节点的可移动范围也会改变。

由此,我们首先给每个节点定义一个最大最小值:注意一个细节,这个最大最小值是可达到的值,也就是说初始位置是0 , 0.11, 0.17,我们按照分辨率,假设屏幕上的最小分辨率(一个像素点)可让我们移动0.001,则第二个点的移动范围是0.111到0.169。

我们再NodeTS类里面定义如下两个值:

 double minCoordinate;double maxCoordinate;

以及相应的四个函数:

 void setMinCoordinate(double mincrd) {minCoordinate = mincrd;}void setMaxCoordinate(double maxcrd) {maxCoordinate = maxcrd;}double returnMinCoordinate() {return minCoordinate;}double returnMaxCoordinate() {return maxCoordinate;}

如果没有面板,则实现架构会比较抽象,现在我们先放下xml文件,先把面板的环境给布置好。下一节开始讲怎么在QT图形面板上画画。所以先暂时离开xml文件的理解部分。等讲完如何作图以后,我们再分别实现两种基于xml的图形图像显示,一个是二维的,一个是三维的。

XML语言数据读写理解16相关推荐

  1. XML语言数据读写理解2

    首先我们需要了解一下对于计算机来说,XML语言到底是怎么构成的.一般来说,XML语言的第一行会是这种形式: <?xml version="1.0" encoding=&quo ...

  2. XML语言数据读写理解1

    可扩展标记语言(XML)是一种非常简单的数据存储读写语言,与其他数据库语言相比,这是它最大的优点. 废话少说,接下来我们就写一下XML的语言格式:如何从0开始写一个XML数据文件,并用C++语言将里面 ...

  3. XML语言数据读写理解13

    最后就是在tsfunGroup类里面定义函数: void writeXML(); 因为不再需要什么返回值了.源码如下: void TsfunGroup::writeXML() {writeFile.c ...

  4. XML语言数据读写理解3

    首先先把我们要读取的xml文件搞上来: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Ap ...

  5. XML语言数据读写理解10

    我们上一节讲完了读出Nodes和其他属性信息的程序,接下来我们把两个Item读到group里面. #pragma once #include <QObject> #include &quo ...

  6. XML语言数据读写理解11

    有了前10节的基础,以及我在自己的博客里发布了那个简单的QT调试窗口类,一共两个,一个是有单例的,一个不是.大家想使用的话只需要加个头文件就可以调用了. 我们现在需要把存好的内容给显示出来,看看是不是 ...

  7. XML语言数据读写理解5

    现在我们再讲一下应该怎么把数据写成XML文件. 还是以例子入手,假设我们已经有了前面章节例子的数据,这一节我们考虑怎么把这些数据按照xml文件格式写入到xml文件里面. 首先列一下我们需要写入的数据: ...

  8. XML语言与JSON

    关于XML语言与JSON 1.什么是XML 2.XML的作用 3.什么是XML文件 XML语法 1.XML文档声明 2.标记(元素/标签/节点) 3.一个XM文档只能有一个最外层标记(根标记) 4.标 ...

  9. 关于iic协议和对AT24C02进行读写数据的理解和代码解读

    关于iic协议和对AT24C02进行读写数据的理解和代码解读 认识IIC协议 IIC协议软件模拟方法 管脚初始化 时序 AT24C02 简介 存储大小计算 工作方式 流程(代码) 认识IIC协议 本文 ...

最新文章

  1. 时间管理大师!一程序员同时给谷歌和 Facebook 打工??
  2. pandas 中有关isin()函数的介绍,python中del解释
  3. Map集合HashMap,TreeMap
  4. 小汤学编程之JavaEE学习day03——JSP组成结构、JSP原理、JSP生命周期、JSP九大内置对象、四大作用域、JSP的MVC模式
  5. 工作分析文献综述_北大教授分析了124 篇不合格硕士学位论文,发现了6个典型问题!...
  6. Scala学习笔记04:内建控制结构
  7. android动态service,Android基础回顾之Service
  8. 小程序云开发实战一:小程序扫一扫获取到图书ISBN码(图书条形码)
  9. 程序员年薪40万被国企同学怒怼:没啥贡献,工资这么高,凭什么?
  10. 算术平均数及几何平均数
  11. java http 401_401 API请求状态错误
  12. 2021-01-09
  13. C++常函数的用法详解
  14. 1034: 夏季促销 C语言
  15. NMEA1803协议3.0版本及以上说明
  16. linux SSD 硬盘优化
  17. google搜索圣经
  18. 基于UWB的室内定位MiniFly无人机编队
  19. SAR信号处理重要工具-傅里叶变换
  20. 基于优先数系选择分压电阻

热门文章

  1. idea使用svn拉取源码,创建分支,合并分支教程
  2. Kali 扫描探测漏洞
  3. 数据分析岗_面试题整理总结
  4. mask rcnn实现教程
  5. 买保险到底有哪些好处
  6. 【微信小程序】 this.setDate({ })与this.data的区别
  7. 渗透测试-后渗透-痕迹清理
  8. C++字符串转十六进制
  9. 关于godoc 不是内部命令问题解决
  10. ubuntu查看网卡型号