基于GPU底层渲染的海量采集数据参数曲线显示研究∗

2021-05-25 02:54高伟亮李大龙
舰船电子工程 2021年4期
关键词:坐标系投影数值

夏 栋 高伟亮 李大龙 马 玲

(1.海军航空大学青岛校区 青岛 266041)(2.佛吉亚(即墨)排气控制技术有限公司 青岛 266200)

1 引言

在数据分析领域数据曲线显示直观,是最常用的分析途径[1~2]。由于采集器性能的提高[3],参数记录数据量越来越大。以采集频率1000Hz为例,1小时采集的数据个数将达到3,600,000个。高性能采集器的采集频率甚至可以达到MHz甚至GHz[4],对应采集数据量也会达到每秒几百万甚至更多。如此巨大的数据量采用Matlab或GDI等普通绘制软件会出现程序卡滞甚至程序崩溃[5]。DirectX利用GPU通过硬件底层完成图像渲染,不占用CPU资源,画图效率高[6~7]。通过DirectX完成曲线作图能够有效解决海量记录数据的曲线回放问题,本文将研究利用DirectX实现海量记录数据的曲线回放绘制。

2 DirectX曲线绘制

2.1 DirectX对象渲染过程

DirectX采用三维渲染技术,为提高渲染效率DirectX对图形对象的渲染通过两个处理步骤组成:

1)坐标转换和光照效果(简称为T&L)。该步骤实现了三维自由空间到二维计算机屏幕坐标的转换,该处理过程在DirectX中称为顶点转换流水线[8],在该步骤中自由空间的顶点坐标从前端送入GPU,在GPU内部完成若干处理和操作后,经过顶点坐标转换和光照效果处理从另一端出来。在该阶段DirectX通过设定一组坐标变换矩阵、视口及光线来控制T&L流水线处理过程;

2)光栅处理[9]。经过前面流水线处理的对象顶点在本步处理中,以点、线、三角形为基本图元应用顶点的颜色属性和纹理贴图[10],并依据渲染设置状态决定每个显示像素的颜色值,最后在计算机屏幕上进行显示。

这两个处理步骤均在GPU(图形处理器)上实现,并不占用CPU(中心处理器)资源[11]。在采集数据参数曲线绘制过程中,图元只涉及到线,并且不用考虑纹理和光照效果。

图1 坐标变换和光照渲染流水线

2.2 DirectX的坐标系[12]

DirectX采用三维渲染技术,而参数曲线显示为二维作图。为了实现DirectX下的二维作图,需要进行科学的坐标变换与投影,因此首先要搞清楚各种坐标系的关系。DirectX包含了若干类坐标系以及不同类型坐标系之间的转换以实现T&L渲染操作的控制,T&L流水线中坐标变换和坐标系主要包括:

1)局部坐标系、全局坐标系和全局变换。局部坐标系指对象或物体描述各顶点位置所使用的本地的坐标,也称为本地坐标系。不同的渲染对象可以在三维空间中通过平移、旋转和尺度压缩,转换到统一的坐标系中显示,该坐标系称为全局坐标系,对应变换过程称为全局变换。

2)窥探坐标系和景观变换。立体空间的物体在两维空间(即计算机显示器)显示的原理与相机拍照的取景过程类似。以相机所在位置为参考点、相机窥探方向为坐标轴建立的坐标系称为窥探坐标系,从全局坐标系到窥探坐标系的变换称为景观变换。

3)投影坐标系和投影变换。对象由世界坐标系变换到观察坐标系后,三维物体被投影到二维平面上,原理类似于投影到虚拟的相机底片上,该变换过程称为投影变换。以该底片中心为坐标原点建立的坐标系称为投影坐标系,对应地,对象在该坐标系中的坐标称为投影坐标。

4)屏幕坐标系和视区变换。计算机屏幕像素显示的坐标值为整数型,该坐标称为屏幕坐标。而投影坐标系的坐标取值为浮点型,将投影坐标系的浮点型坐标值转化为计算机屏幕上可显示的整数型像素坐标称为视区变换。

2.3 参数曲线绘制

利用DirectX绘制参数曲线,本质上是二维作图,这可以通过将三维空间对象正交投影到两维空间来实现,如图2所示。需要注意,正交投影在z轴上有一个视景范围(znear~zfar),对象z坐标只有在该范围内才能被投影到二维空间。因此在设置曲线上点的z坐标时,取值不能超出该范围,否则曲线将不能显示。另外,由于曲线绘制不涉及光照效应,为提高渲染效率,应将光照效应关掉。

图2 正交投影效果示意图

在DirectX中绘制曲线,可通过将数值点连成线来实现,连线的绘制可通过将绘制图元设置为线段条带(D3DPT_LINESTRIP)实现。生成参数曲线点的坐标取值方法如下:x坐标为时间,即采集参数某一固定数值发生的时刻;y坐标为采集的参数数值;z坐标可以在(znear~zfar)内任意取值。此时的参数曲线点坐标系为局部坐标系,参数曲线能够在界面某区域正确显示,还需要通过世界变换切换到世界坐标系中。由于不同参数的采集频率不一致,如果参数数据来自不同的采集器,起始时间也会不同。设参数的采集频率为f0,采集器的起始时间为t0。对于参数第n点的x坐标值可由下式得到。

3 采集数据参数曲线绘制坐标变换

在局部坐标系中,x轴为时间,y坐标为某个采集参数在x时刻对应的采集数值,这种显示方式也是数据分析人员需要的。而在DirectX显示坐标系中,x轴的显示范围为(-1,1),y轴的显示范围也是(-1,1),因此需要通过世界变换将曲线从局部坐标系变换到世界坐标系。由于还需要显示坐标刻度、参数名等信息,并且同一面板需要显示多条曲线,参数曲线显示范围一般不覆盖整个显示面板,因此从局部坐标系到世界坐标系的变换如图3所示。

图3 参数曲线从局部坐标系变换到世界坐标系

图3中参数曲线从局部坐标系中的真实坐标变化到的坐标变化到屏幕显示的世界坐标系,可以通过压缩和平移两个坐标变换来实现。这两个坐标变换在DirectX中通过正确设置坐标压缩变换矩阵和坐标平移变换矩阵实现,并且将两者相乘得到新矩阵,将新矩阵设置为世界矩阵,用DirectX绘制线段条带(D3DPT_LINESTRIP)图元就可以得到正确显示的参数曲线。在实际操作过程中,既可以先计算压缩变换矩阵再计算平移变换矩阵,也可以先计算平移变换矩阵再计算压缩变换矩阵,但是需要注意不同顺序求得的矩阵取值会不同。本文采用先计算压缩矩阵后计算平移矩阵的顺序。

3.1 压缩变换矩阵的计算

为提高GPU计算效率,DirectX提供了强大的矩阵运算库。其中,D3DXMatrixScaling()函数实现了压缩矩阵的计算。该函数有3个输入变量和1个输出变量,输入变量sx、sy和sz分别为x轴、y轴和z轴上的压缩因子,输出变量pOut为需要计算得到的压缩矩阵。只要计算出压缩因子sx、sy和sz调用D3DXMatrixScaling()函数就可以得到。因为采用正交投影,z轴上的压缩因子可以不考虑,一般设为sz=1.0,因此只需要计算出x轴和y轴上的压缩因子sx和sy。

以图3中参数数据为例,在局部坐标系中x(即参数采集时间)的取值范围为(xmin~xmax),变换到世界坐标系后x的取值范围为(x'min~x'max),那么x轴压缩因子sx可由下式得到。

同理,在局部坐标系中y(即参数数值)的取值范围为(ymin~ymax),变换到世界坐标系后y的取值范围为(y'min~y'max),那么y轴压缩因子sy可由下式得到。

3.2 平移变换矩阵的计算

压缩变换确定了参数显示尺度,参数显示位置的确定则需要平移变换来实现。DirectX矩阵运算库中D3DXMatrixTranslation()实现了平移矩阵的运算。该函数的3个输入变量Δx、Δy和Δz分别为x轴、y轴和z轴的平移量,输出变量pOut为需要计算得到的平移举证。由于采用正交投影,z轴平移量可忽略,一般设为Δz=0.0,只需要计算x轴、y轴的平移量Δx和Δy。平移因子的计算比较复杂,x轴平移会造成同一面板中不同参数时间没有对准,y轴平移错误会造成参数数值显示错误。下面分别研究x轴平移量Δx和y轴平移量Δy的求解方法。

1)x轴平移量计算

要计算x轴平移量Δx,首先要知道显示曲线的起始和终止时间。数据分析人员在分析数据时为了观察细节,可能会对参数曲线进行时间尺度上的放大和缩小,即x数据的起止时间是随着用户选择而变化。设用户选择的起始时刻为xmin,终止时刻为xmax,曲线显示区域x轴范围为(x'min~x'max)。x轴平移量的计算方法可由下式得到。

2)y轴平移量计算

y轴平移量Δy的计算方法与Δx计算时间相似。需要注意的是,数据分析人员为了对比不同参数数值,可能在同一个面板上显示多条参数曲线,并且为方便对比分析人员可能会调整曲线的纵向位置(即显示在y轴上的位置)。设某曲线调整y轴位置后y轴坐标显示范围为(y'min~y'max),对应参数真实值范围为(ymin~ymax)。平移量Δy可由下式计算得到。

4 软件设计及显示结果

参数数据曲线回放软件实现了以下基本功能:显示多个参数的数值曲线,数值曲线的横坐标(x轴)为时间,纵坐标(y轴)为参数不同时刻参数的取值。除此以外回放软件还应具备的功能有:显示数值刻度以便于分析人员观察参数数值;根据分析人员设置的起止时间显示一段时间内的参数曲线值;准确显示固定时刻参数数值。根据需要实现的功能软件界面设计如图4所示。界面组成包括功能区、曲线显示区和浮动的数值面板,曲线显示区又由刻度轴显示区和曲线绘制区组成。

图4 参数曲线回放界面

功能区由命令按钮组成,分析人员通过命令按钮执行参数显示属性的设置,如放大、设置参数时间起始点、重绘等功能。曲线绘制区显示多条参数曲线,刻度轴区域在参数曲线对应的y轴位置显示刻度信息。数值面板将选定时刻参数的准确数值显示在列表中。

根据前述DirectX操作和软件设计需求进行软件开发。以参数采集频率1MHz为例,采集时间持续1h。参数曲线回放运行结果如图5所示。根据运行结果,采用DirectX坐标变换渲染可以实现采集数据曲线准确回放,对多个参数的多条曲线进行回放时,程序流畅,显示平滑,渲染效果远好于GDI效果。

图5 参数曲线回放程序运行结果

5 结语

随着计算机技术的进步与发展,数据采集设备的带宽越来越高,对应产生的采集数据数量巨大,使得采集数据的回放和分析变得困难,普通的GDI不能正常回放如此大量的数据。DirectX采用GPU实现硬件底层渲染,不占用计算机的CPU资源。DirectX通过正确的投影设置、坐标缩放/平移变换和合理的渲染图元设置,能够对参数巨量数据进行曲线回放。运行结果表明,利用DirectX实现参数数据曲线回放,程序运行流程,曲线显示平滑,可以满足数据分析的要求。

猜你喜欢
坐标系投影数值
全息? 全息投影? 傻傻分不清楚
投影向量问题
独立坐标系椭球变换与坐标换算
体积占比不同的组合式石蜡相变传热数值模拟
数值大小比较“招招鲜”
舰船测风传感器安装位置数值仿真
铝合金加筋板焊接温度场和残余应力数值模拟
极坐标系中的奇妙曲线
找投影
三角函数的坐标系模型