水下作业观测系统布局可视化仿真软件的研究

2016-07-10 07:08吕文磊李智生夏光辉
电子技术与软件工程 2016年8期

吕文磊 李智生 夏光辉

摘 要:利用基于Windows 平台的全参数化特征造型软件SolidWorks绘制水下作业平台及水下实况观测设备、水下观测目标的三维立体模型,利用Deep Exploration专业图形格式转换软件将3D模型转换成OpenGL库函数可读取的数据列表格式,在OpenGL图形开发环境中进行了3D模型材质颜色设计、水下观测设备视场设计和3D场景的光照、漫游、缩放、旋转等功能设计,并在基于VC++2010的MFC软件开发平台下构建软件程序框架,设计出一套水下作业观测记录系统布局人机交互的可视化仿真软件,软件实现了布局场景显示及视角变换、设备布局调整及视场覆盖效果显示、观测目标显示及位置调整、观测设备布局效果图及安装布局参数保存等功能。

【关键词】可视化仿真 水下观测 SolidWorks OPenGL

1 引言

水下过程实况观测与记录为我们水下作业事后分析提供了第一手直观的视频资料,对水下工程作业具有重要意义。水下过程观测记录系统摄像机、照明灯的布局直接关系到有限摄像机数量条件下视场覆盖范围、成像质量、拍摄的有用信息量等。

软件仿真是在计算机中生成一种仿真环境,以视景仿真和三维动态仿真来展现实体的行为方式和环境。软件仿真这个概念从20 世纪80 年代正式提出以来,随着计算机科学的飞速发展己取得了很大的发展,在工程、军事、医学、影视等领域已得到了广泛的应用。在军事方面主要应用于水下装备虚拟设计和虚拟战场演示等。本论文依托该项技术设计研制一套水下作业观测设备布局可视化仿真软件系统,为水下作业观测记录设备合理布局提供一个有效便捷的技术方法。论文采用SolidWorks绘图工具软件绘制了水下作业平台、水下作业观测设备、观测目标的三维立体模型,并用Deep Exploration三维图形专业格式转换软件转换模型格式为OpenGL可读取的数据列表格式,在OpenGL图形开发环境下实现了水下作业观测设备布局场景显示及视角变换、观测设备布局效果显示及布局调整、观测目标显示及位置调整、透明度设置、布局方案效果图及参数保存等功能。

2 总体设计思路

软件仿真实现现实场景计算机虚拟显示可采用的技术方案多种多样,编程环境可选择VC++、VB或者Delphi等,图形开发库可选择OpenGL或者DirectX。单纯采用编程语言及自带的函数库很难设计出复杂的三维模型,流行的图形开发包DirectX较适合于游戏开发及加强多媒体性能等方面,OpenGL则可以设计与渲染出复杂、高仿真度的三维模型且其与多种编程语言方便有效互连。SolidWorks绘制的三维模型经格式转换能方便地导入OpenGL三维场景绘制环境。另外,OpenGL可以与VC++2010建立紧密接口,便于实现有关计算和图形算法,可保证算法的正确性和可靠性。在VC++2010的MFC框架编程环境下进行可视化仿真软件程序设计,利用VC++的封装性可以减少开发自定义窗口的时间和创造出可重用的代码,可以在必要时更好的控制窗口的活动。综合各方面因素,本论文采用VC++2010与OpenGL联合开发设备布局可视化仿真软件。

在水下作业实况观测过程中,为获取水下作业过程更全面的视场视频图像信息,必须从三个方面进行分析:首先分析设备安装平台尺寸及可安装位置分布;其次要获取水下观测摄像机、照明灯等设备的性能(像机的视场、作用距离、灯光照射范围等)参数;再次要对拍摄目标的形状、大小尺寸及位置信息等进行分析。所以本论文可视化仿真软件中三维模型的建立也主要围绕此三个方面进行。

SolidWorks作为基于Windows平台的全参数化特征造型软件,可以方便地实现机械零件的三维实体造型、装配和生成工程图。依据相关资料和实物的准确尺寸可以绘制出各项目的三维模型。采用SolidWorks机械设计工具软件绘制各摄像机、辅助照明灯、水下作业平台、观测目标等三维模型,先建立各项目单个零件图,然后将相关零件组合成装配图。这些零件图和装配图组成设备安装三维立体图库。论文为了将三维模型能够转换为能读入VC++编译环境的CPP 文件,首先将由SolidWorks 建立的三维模型转换为STL 文件格式的网格模型。接着通过Deep Exploration 把STL 文件转换为CPP 格式的文件,再把CPP 格式三维模型添加到MFC 框架的OpenGL绘制环境中,并进行模型的数据列表读取和显示,接着利用OpenGL库函数实现模型绘制、模型观察、颜色模式的指定、光照应用、图像效果增强、位图和图象处理、纹理映射、实时三维视景仿真等,OpenGL函数实现的这些功能添加到MFC类-对象中组成实现软件系统的各功能模块。

论文研究流程如图1所示。

3 功能模块实现

为了模拟水下作业实况观测设备安装的实际过程与安装效果,仿真软件主要设计以下几个功能模块实现软件系统各功能:

(1)场景显示、漫游模块:创建安装效果显示窗口,实现显示窗口视角平移、旋转等视场调整功能;

(2)三维模型导入选择模块:建立安装环境的三维场景,并将各设备三维模型选择添加导入三维场景中;

(3)摄像机、灯布局调整模块:实现水下作业实况观测系统各摄像机和灯的位置、姿态调整与坐标显示;

(4)拍摄或照射区域设计模块:实现水下作业实况观测系统摄像机摄录视场、灯照明视场显示与水下透明度调整;

(5)观测目标位置调整模块:实现观测目标位置调整功能;

(6)布局效果图与布局参数输出模块:实现水下作业实况观测系统安装布局可视化仿真效果图及布局参数的输出。

设备布局可视化仿真软件系统的功能模块组成框图如图2所示。

下面就可视化仿真软件几个主要功能模块的设计与实现分别进行详细介绍。

3.1 场景显示、漫游模块

软件主要采用启动线程的方式进行场景绘制、模型导入和位置调整,线程创建函数为CreateThread(NULL,0,Plot3DTrajectoryShow, NULL,0,NULL);线程响应函数Plot3DTrajectoryShow主要调用CTrajectory3DView的接口函数CreateOpenglWindow()完成三维场景显示,该接口函数调用类成员函数DrawGLScene()实现水下场景绘制。

运用OpenGL进行三维场景绘制显示首先需要创建绘制环境渲染描述表(Rendering Context,以下简称“RC”)。一旦在一个线程中指定了一个当前渲染描述表,在此线程中其后所有的OpenGL命令都使用相同的当前渲染描述表。软件将首先产生一个OpenGL渲染描述表并使之成为当前渲染描述表,这将分为三个步骤:设置窗口像素格式;创建渲染描述表;设置为当前渲染描述表。

3.2 三维模型导入选择模块

软件工程采用类——对象的方法,为三维场景中每个三维模型独立单元建立一个类,定义一个该类对象,每个模型的顶点列表、材质、纹理等数据及生成模型数据列表的函数都封装在各自的类中。在选择导入某设备三维模型时,只需要调用 glCallList(GLenum) 函数加载三维模型的数据列表,函数参数 GLenum 为三维模型数据列表的编号。

由于摄像机和照明灯需要俯仰调整,此时支架的位置信息与设备位置信息不一致,因此,水下观测设备及其安装支架必须分开成两个独立模型进行类创建与对象定义,便于各自调用。

3.3 摄像机、灯布局调整模块

OpenGL 中使用的坐标系有两种,分别为世界坐标系和屏幕坐标系。世界坐标系即OpenGL 内部处理时使用的三维坐标系,而屏幕坐标系即为在计算机屏幕上绘图时使用的坐标系。

OpenGL 所使用的世界坐标系通常为右手型。从计算机屏幕的角度来看,z 轴正方向为屏幕从里向外,y 轴正方向为屏幕从下向上,x 轴正方向为屏幕从左向右。计算机本身只能处理数字,坐标建立了图形和数字之间的联系。因此,为了使仿真模型数字化,要在被显示的物体所在的空间中定义一个坐标系。这个坐标系即为世界坐标系,这个坐标系的长度单位和坐标轴的方向要适合对被显示物体的描述。此外,在图形显示器屏幕上定义一个二维直角坐标系,这个坐标系为屏幕坐标系。计算机对数字化的显示物体做了加工处理后,要在图形显示器上显示。

OpenGL图形库的变换包括模型几何变换和投影变换。模型几何变换有平移、旋转、缩放变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。软件工程在图形绘制之前首先要设置好投影变换矩阵、视点坐标和视口变换矩阵,这些矩阵的设置保证软件工程显示窗口最终能以我们调整的视角显示我们想要看到的世界坐标系下的三维模型。接着软件工程利用世界坐标系下三维模型独立单元局部坐标系的平移、旋转、缩放变换实现了三维模型位置姿态的调整。

3.4 摄像机、灯视场设计模块

论文软件工程采用具有渐变色部分透明效果的锥体来表现水下作业实况观测设备的视场。采用四棱锥绘制摄像机摄录视场,四棱锥水平发散角表现摄像机的水平视场角,四棱锥竖直发散角表现摄像机的竖直视场角;采用圆锥体绘制照明灯照射视场,圆锥体发射角的表现灯的照明视场角。各棱锥从顶点到底面以颜色深度逐渐变浅来表现摄录视场和照明视场光线的强弱,各棱锥的高度表现摄像机成像距离和照明灯有效照射距离,棱锥高度值与海水透明度成线性关系,因此可以通过设置海水透明度值来表达摄像机成像距离和照明灯有效照射距离。各不同类型设备视场用不同颜色区分开来,而且各视场颜色可变更以达到理想分辨效果。

3.5 观测目标导入与位置调整模块

观测目标三维模型使用SolidWorks工具软件绘制,经格式转换后进行VC++类封装,创建观测目标三维模型的显示列表,然后运用OpenGL的几何变换函数对观测目标的位置进行调整,观测目标模型的导入与位置调整方法与观测设备导入与位置调整基本一致。观测目标位置设置可依据实际情况进行变化,软件界面上通过输入位置信息实现观测目标位置的确定。

3.6 布局效果图与布局参数输出模块

在进行摄像机、照明灯布局设计完成后,该模块具有以位图文件形式保存布局效果图,以文本文件形式保存各摄像机、照明灯布局参数的功能,保存参数包括各观测设备安装位置、方位角、俯仰角以及观测目标位置和海水透明度值。软件采用 OpenGL库函数glReadPixels( )从颜色缓冲区读取场景窗口里所有像素数据,并将此像素数据写入创建好文件头数据和信息头数据的位图文件,实现位图保存场景功能。

观测设备安装位置坐标是在水下作业平台平面坐标系下的坐标值,该坐标系原点及X、Y轴方向先预设好。观测设备方位角、俯仰角也预先作一规定。

在软件界面的主菜单“文件”子菜单下“保存效果图”和“保存布局参数”菜单分别实现了以上效果图及参数保存功能。

4 软件测试

在软件工程各项功能设计完成后,要对软件各项功能进行测试,其中包括场景观察视角调整功能、观测设备导入、位置姿态调整功能、视场效果显示及透明度调整功能、观测目标导入及位置设置功能、布局效果图和布局参数输出功能等。

论文以某一水下转动作业实况观测实际需求为例,在海水透明度为5米的条件下对观测设备进行安装布局,布局设备包括多台不同摄像机及照明灯,操作人员可根据观测目标位置及观测需求对观测设备进行调整并从不同视角查看观测效果。

运行软件,添加各设备,调整各观测设备位置姿态,对布局效果进行人机交互显示,布局总体效果如图4所示,各不同设备布局效果分别如图5、图6所示。

设备布局保存的参数文档如图7所示。

5 结论

论文运用OpenGL图形开发库联合SolidWorks绘图工具软件,在基于VC++2010的MFC编程环境下设计开发了一套水下作业观测设备布局可视化仿真软件。论文采用SolidWorks绘图工具软件绘制了作业平台、观测设备、观测目标的三维立体模型,并用Deep Exploration三维图形专业格式转换软件转换模型格式为OpenGL可读取的数据列表格式,在OpenGL图形开发环境下实现了水下作业观测设备布局场景显示及视角变换、观测设备布局效果显示及布局调整、观测目标显示及位置调整、透明度设置、布局方案效果图及参数保存等功能。经软件功能测试,可视化仿真软件系统功能实现良好,对更好地获取水下作业过程实况观测信息具有重要意义。

参考文献

[1]邵宇.基于OpenGL的导弹飞行视景仿真研究[D].哈尔滨:哈尔滨工程大学,2007.

[2]乔生明,刘晓娟.基于OpenGL的城轨ATP系统超速防护功能可视化仿真[J].铁路计算机应用,2012(03).

[3]马存宝,朱超.基于OpenGL三维飞行模拟的实现[J].工业仪表与自动化装置,2014(03).

[4]鬲文娟.电子设备三维仿真平台开发[D].西安:西安工业大学,2014.

[5]侯俊杰.深入浅出MFC[M].武汉:华中科技大学出版社,2001.

[6]尚游,等.OpenGL高级图形编程指南[M]. 哈尔滨:哈尔滨工程大学出版社,1999.

[7]乔林,费广正等编著.OpenGL程序设计[M].北京:清华大学出版社,2000.

作者简介

吕文磊(1982-),男,安徽省安庆市人。博士学位。现供职于91550部队93分队。主要研究方向为光学测量、计算机仿真。

作者单位

91550部队93分队 辽宁省大连市 116023