新技艺在多维勘验及摹拟仪表里的践行
OpenGL和图形显示OpenGL是一个开放图形库。而更严格地讲,OpenGL被定义为“图形硬件的一种软件接口”,它被设计成独立于硬件的高效接口,可以在很多硬件平台上实现。不同平台的具体实现方式可能有所差异,但其接口必须符合OpenGL规范,因此代码具有高度的可移植性。OpenGL标准组成部分包括核心库与实用库,共有300多个函数,可以运行在任何OpenGL的工作平台上。
MicrosoftWindows在内部已经通过动态链接库的形式对这两个函数库提供了支持,对大量应用可以直接编程进行。因此,本系统选用了OpenGL做为三维表现的底层开发工具。
作为图形显示的开发库,OpenGL具有执行速度快、可移植性好的优点。但OpenGL只包含最基本的绘图和渲染方式,没有提供几何实体图元,在系统中需要封装相应的几何绘图函数、满足测试需求的三维场景描述函数、平台的外观和构建函数等等。
目前,本系统平台能够满足测试对三维场景的需求,具有较完备的函数描述和包装,能够实现建立几何形体和虚拟仪器、产生光照效果、进行纹理映射等各种与图形显示有关的功能。这些功能已经实现。
三维坐标的构建要在三维空间中绘图必须先建立一个三维坐标系。OpenGL提供了投影视图用以建立三维空间的参照系,操作者只需要关注如何在这个参照系中绘图,将其投影到计算机屏幕的工作则由OpenGL完成。但OpenGL建立的参考系是基于一般的计算机图形显示,它的原点位于计算机屏幕中心,并以计算机屏幕为XY平面,Z轴正方向指向用户,但实际中需要不同的。为此,系统建立了这两种参考系的描述函数,以便于模型建立及观察。函数中:lengthX:X轴长度,lengthY:Y轴长度,lengthZ:Z轴长度;intervalX:X轴坐标单位间隔,intervalY:Y轴坐标单位间隔,intervalZ:Z轴坐标单位间隔;colorX、colorY、colorZ:坐标轴颜色,gridColor:网格颜色,gridPattern:网格的线型,为0时不绘制网格三维场分布的描述和构建计算机屏幕是一个二维的平面,对于一维的分布,如一个探测器返回的温度随时间变化的情况,可以直接在屏幕上通过一个二维的曲线来描述。对于二维的分布,如在一个平面上的多个探测器返回的温度,则一般可以通过在一个二维点处用高度来描述该点处的值,最终形成一个以该二维坐标为底面的一个曲面来展示,此时通过将一个三维的曲面以不同视角投影到二维屏幕来展示一个三维形貌。
但对于三维场,上述的方法难以再适用。
解决三维场分布的问题可以通过引入第四维―――颜色维的方式来解决,即用三维空间中点的位置处的颜色来描述该点处的值,此时有两种方式选择,一是用不同颜色值来表示该点的值(一般按由红到蓝表示由强到弱),一种是用颜色的明暗强度来表示值的大小;当然也可将二者结合使用。由于用不同颜色值表示不同的值需要约定,因此系统中主要使用的是第二种方式,即在空间中按照指定位置测试系列分布点的值,使用者可指定某颜色,并用颜色的明暗强度来表示场强大小。保持颜色的明暗将使用相同比例不同数值的RGB方式来表征。
例如用黄色来表示场强强弱,在A点处的场强最大,我们可以将该点的颜色设为(1,1,0);在B点处的场强为A点的90%,则B点的颜色设为(0.9,0.9,0),依此类推。需要注意的是RGB分量的最大值必须限制在0到1之间,所以点的颜色通常要归一化,即把强度最大的点颜色分量限制为1。同时,为了观察的需要,系统提供了点、网格、曲面的三种面形表现形式,如图1(a,b,c)。
确定三维场空间中各个点的位置及颜色后,需要考虑如何将各点联系起来展示出整体效果。系统考虑的方式是取定某个坐标,即在空间中固定一个观察平面,然后根据该平面上的二维点位置及颜色进行渲染,这样就得到场在该观察平面上的分布情况。逐个平面观察,即可获得整个场的三维分布,如图2为一个高斯场在不同z坐标下的截图分布。
图2的方式适合于场点分布均匀的情况,对于另一些情形,我们并不需要分布均匀的场点,这时可以在场点之间通过连线方式绘制。比如两个电荷的空间电场,我们可以考虑从一个电荷引出场线:首先设置好一定步长比如1,然后选择一个方向,从电荷中心沿该方向延伸1的距离,记录下该处的位置及场强,然后沿该点场强方向再延伸1的距离,并记录位置、场强,重复以上步骤直到超出观察空间或场强已小到无需考虑,最后将记录下的点连接起图2高斯场在不同z坐标下的截面(a)点(b)网格(c)曲面图1不同的面形表现模来,这就形成了一条场线。选择不同的初始方向并重复上述步骤即可得到空间中的电场分布。如图3。
上述示例的场强度基本是用单色的亮度表达,由于人眼对颜色更敏感,系统中还提供了用不同颜色表现不同强度,一般由―――蓝―――红表示由弱―――强。同时,测试获得的点是离散的,不利于对整体的描述,为此系统对面形(平面、曲面)均提供了插值方式的面形描述。系统还可直接对空间进行平面切片,直接观察多个截图的方式,观察空间的场分布。图4为一个每面8×8点的温度场分布的彩色切片描述,共4个面。其中4(a)为点模式表示,4(b)为系统插值后的面分布,4(c)为一个点面结合的表示。
结束语通过VC和OpenGL编写的系统,可以良好地展示三维场的分布结构和虚拟仪器的三维形貌,包括其不同部件运动的形貌。相信系统能够在虚拟仪器应用和三维场分布描述等方面进一步展现其特点和能力。
【中国粮油仪器在线】部分信息来自互联网,力求安全及时、准确无误,目的在于传递更多信息,并不代表本网对其观点赞同或对其真实性负责。