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

XML语言数据读写理解16

下面我们介入一个应用场景:也就是我们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的图形图像显示,一个是二维的,一个是三维的。

 

相关文章:

  • QT图形显示和处理1
  • QT图形显示和处理2 坐标系统(重点)
  • QT图形显示和处理3 坐标系统(重点)
  • QT图形显示和处理4
  • QT图形显示和处理5
  • QT图形显示和处理6
  • QT图形显示和处理7
  • QT图形显示和处理8
  • QT传输函数控件设计1 引子
  • QT传输函数控件设计2 体渲染和VTK
  • QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
  • QT传输函数控件设计4 接着进行融合
  • QT传输函数控件设计5 显示体渲染效果
  • QT传输函数控件设计6 设计Dock窗体结构
  • QT传输函数控件设计7 边界和布局规划
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • gcc介绍及安装
  • HTML-表单
  • JDK 6和JDK 7中的substring()方法
  • LeetCode18.四数之和 JavaScript
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MySQL主从复制读写分离及奇怪的问题
  • ubuntu 下nginx安装 并支持https协议
  • 闭包--闭包作用之保存(一)
  • 实现简单的正则表达式引擎
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 在Mac OS X上安装 Ruby运行环境
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • NLPIR智能语义技术让大数据挖掘更简单
  • 第二十章:异步和文件I/O.(二十三)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Python 3 新特性:类型注解
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #if #elif #endif
  • #Z2294. 打印树的直径
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $forceUpdate()函数
  • $GOPATH/go.mod exists but should not goland
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)Google的Objective-C编码规范
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 反射 Reflect
  • .Net 垃圾回收机制原理(二)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • @AliasFor注解
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [] 与 [[]], -gt 与 > 的比较
  • [AX]AX2012 SSRS报表Drill through action
  • [C]整形提升(转载)
  • [C++] 统计程序耗时