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的图形图像显示,一个是二维的,一个是三维的。