基于OpenGL的海洋虚拟场景显示技术研究

来源 :中国电气工程学报 | 被引量 : 0次 | 上传用户:xpzcz1989
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文基于OpenGL (Open Graphics Library)技术,通过在Microsoft Visual C++2010软件平台下编程,首先对水声通信网中运动节点的运动场景进行了仿真,包括海洋、海底的三维渲染显示;运动节点以潜艇为例,通过导入其3ds模型文件到VC++中显示,实现节点的三维显示。另外,最后还设计实现了人机交互功能,通过鼠标按键和转动滑轮来改变观察的视角以及对运动节点运动轨迹的定制,满足了水声通信网络中显控平台的基本要求。
  关键词:水声通信网;三维显示;运动节点;OpenGL
  中图分类号  TP391.9   文献标识码   A
  Research on Display Technology of the Sea Scene Base on OpenGL Technology
  WANG Jian
  ( No. 710 R&D Institute, CSIC, Yichang 443003, China)
  Abstract:Based on OpenGL (Open Graphics Library) technology and Microsoft Visual C + +2010 programming software platform,the thesis firstly simulate mobile nodes’ activities environment which includes 3D render display of seabed、sea water and the surface of sea.Taking an example of submarine, its 3ds model file is imported into VC+ +.And its movement can be control.
  In addition, the interactive features are designed, which is achieved through mouse button and rotate the pulley to change the observation point and control mobile nodes’ trajectories, which meet the requirements of display and control platform of underwater acoustic communication networks.
  Key words: Underwater Acoustic Communication Networks; Three-dimensional Display; Mobile Node; OpenGL
  0 引言
  水聲通信网由声潜标、水下自动航行的潜器、浮标或海面基站组成。水声通信网就是将无线浮标、潜艇或AUV(Autonomous Underwater Vehicle)、潜标依照无线组网方式建立起来的用于通信的水下网络[1],并可将海面基站与现有的陆、空通信网相连,形成一个陆、海、空的无缝网络[2]。
  水声通信网络的海洋虚拟场景显示系统在整个网络中起着统揽全局的作用,利用3D图形库OpenGL和软件开发平台VC++,模拟的海洋环境中,三维显示和控制水声通信网中的节点。
  1 OpenGL基本工作原理
  MFC(Microsoft Function Class)是微软公司在VC2010软件平台中提供的一个C++类库,在其中封装了很多Windows API函数,编程人员在编程的时候可以直接调用成员函数,是Windows下程序设计经常使用的一个类库,本文采用MFC方式进行编程。
  OpenGL可以被看成是一条生产流水线,通过添加场景、物体的顶点、表面细节等信息,使产品是看起来具有三维效果的平面位图。在 OpenGL中每个物体都是由一系列平面构成,这些平面分别记录了该物体的表面,用户提供需要围绕着平面边缘的线段的顶点(Vertex)参数、纹理(Texture)两组信息进行编程[3]。
  OpenGL 可以进行以下基本操作步骤:
  几何建模;坐标变换:包括平移、旋转、缩放和镜像四种基本变换;
  颜色模式设置:OpenGL颜色模式有两种,即 RGBA 模式和颜色索引;
  色彩与光照处理:根据应用的要求来确定色彩,然后确定光照条件;
  纹理映射:利用 OpenGL的纹理映像功能可以逼真地表达物体表面细节;
  缩放操作:随着观察视角的变化改变场景中模型的大小。
  2海洋三维场景的建模
  三维建模中,场景的模拟是十分重要的,场景包括海洋、地面和蓝天等,真实的美感使三维效果更加逼真。水声通信通信网的显控平台是在水下环境模拟的,首先要对将要模拟的环境进行仿真,使其更加逼近真实的海洋环境,此过程包括对海底地形、海水和潜艇等网络节点模拟。
  2.1 海底地形建模
  地形是海水和海面的承载,模拟更加逼真的三维地形系统,加强整个显控系统的立体效果。但是由于本文设计过程中缺少真实的地形数据,采用纹理映射的方法模拟替代[4]。
  纹理是具有一定像素宽、高的细节图像,通常可以以BMP文件格式进行加载。可以有一维、 二维和三维的纹理,本文采用二维纹理。纹理映射(Texture Mapping)是一种计算机图形学中应用最为广泛的技术,通过纹理映射,可以在不增加物体表面几何复杂度情况下。有效模拟和增强景物表面的细节特征,同时增加绘制模型时的真实感,或者合成某种特定的视觉效果等。   纹理映射的步骤:
  (1)创建纹理对象并为其指定纹理
  (2)指定如何将纹理应用于每个像素;根据片元的颜色和纹理图像数据计算最终的RGBA值
  (3)启用纹理映射;可以使用符号常量 GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_CUBE_MAP作为参数调用函数glEnable()或glDisable(),这分别对应于一维、二维、三维和立方图纹理的映像模式   (4)使用纹理坐标和几何坐标绘制场景;可以使用纹理坐标函数和顶点坐标函数glTexCoord2f()和glVertex3f();
  2.2 海水建模
  海水是水声通信网中节点的主要的运动空间,对海水效果模拟对整个三维的整体效果有着重要的影响。海水效果的渲染可以通过对显控界面背景颜色的设置来达到和真是的海水相同的颜色效果。在MFC环境下,通过在视图类的OnCreate函数里对界面背景进行清除并填充海水的颜色[5]。
  OpenGL中实现海水效果的步骤及实现程序为:
  1、清除并填充背景颜色
  glClearColor(0.4f,0.6f,1.0f,1.0f);
  2、清除颜色和深度缓存
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  为了使海水的场景和海底的场景融为一体,是效果更加逼真,需要采用OpenGL的雾化处理。通过恰当的设置雾化处理的参数,海水与海底融合起来。
  用下列函数雾参数和雾方程:
  1、启用雾化特效
  glEnable(GL_FOG);
  2、选择雾化函数
  (1)设置雾的类型,采用线性雾化
  glFogi(GL_FOG_MODE,GL_LINEAR);
  (2)设置雾的浓度为0.5
  glFogf(GL_FOG_DENSITY,0.5);
  (3)设置雾的开始和结束位置
  glFogf (GL_FOG_START,10);
  glFogf(GL_FOG_END,100);
  (4)设置雾的颜色
  GLfloat fogColor[4]={0.4f,0.6f,1.0 f,1.0f};
  glFogfv(GL_FOG_COLOR,fogColor);
  1. 设置雾的渲染方式

  glHint(GL_FOG_HINT,GL_DONT_CARE);
  2.3 海洋环境的光照处理
  在OpenGL中,光线由成红、绿、蓝三种光的组合而成。因此光源的颜色就可以由它所发出的这三种原色光的含量单独决定。
  虚拟水下光照的具体设置步骤:
  (1)首先启动光源
  glEnable(GL_LIGHTING);  //开启光照
  glEnable(GL_LIGHT0);    //开启指定光源
  (2)光照效果、光源位置和方向的设置
  定义好各个光照分量数组后,利用函数glLightfv()进行设置,括号内的3个参数分别代表光源标识、需设置的属性和期望的属性值。本文中环境光、漫射光和镜面光的设置为:
  GLfloat AmbientLight[]={0.61f,0.92f,0.86f,0.4f};         //环境光
  GLfloat DiffuseLight[]={0.2f,0.2f,0.2f,1.0f};            //漫射光
  GLfloat SpecularLight[]={0.5f,0.5f,0.5f,1.0f};           //镜面光
  glLightfv(GL_LIGHT0,GL_AMBIENT,AmbientLight);
  glLightfv(GL_LIGHT0,GL_DIFFUSE,DiffuseLight);
  glLightfv(GL_LIGHT0,GL_SPECULAR,SpecularLight);
  场景中光源的位置和光照方向同样十分重要,利用函数glLightfv()来指定光
  源的位置:
  GLfloat LightPos[]={0.0f,0.0f,0.0f,1.0f};//光源位置,Alpha=1.0為点光源
  glLightfv(GL_LIGHT0,GL_POSITION,LightPos);
  (3)水面波浪材质设置
  考虑到整体的效果,需要对水面材质进行设置,利用函数glMaterialfv()即可完成对水面材质的设置。材质环境光及光亮度可设置如下:
  GLfloat mAmb[]={0.0f,0.0f,0.0f,1.0f};                    //设置材料值   GLfloat mDif[]={0.0f,0.0f,0.0f,1.0f};
  GLfloat mSpe[]={1.0f,1.0f,1.0f,1.0f};
  GLfloat mEmi[]={0.3f,0.3f,0.3f,1.0f};
  GLfloat mShininess=100.0f;
  glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,mAmb);
  glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mDif);
  glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mSpe);
  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,mEmi);
  glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,mShininess);//反光系数
  3 海洋虚拟三维运动节点的建模
  三维模型的绘制可以直接利用OpenGL图形库来绘制,也可以采用一些专业的三维建模软件进行绘制,然后将绘制的三维模型导入到OpenGL中。
  3.1 3D Studio MAX 构建三维模型
  3D Studio MAX(简称3ds MAX)是一个集成化的开发环境,把模型的建立、绘图和渲染以及动画制作三大部分集成在一起,利用Windows自身的图形化开发界面,在一个窗口中即可完成场景建立、渲染和动画制作等各项工作[6]。
  本文中3ds MAX建模的基本过程包括:
  1、创建模型
  3ds MAX中的建模方式有很多,如建模过程中可以对二维图形进行车削或挤压,可以由自身带有的三维基本几何体组合而成。
  2、添加材质和贴图
  模型创建完成以后,可以使用“材质编辑器”设计材质和贴图效果,为模型设置材质能使模型看上去更加逼近真实效果[7]。3ds MAX提供了多种材质类型,它们可以模拟出折射、反射的效果并且表现出凹凸不平感。贴图就是指把合适的图片文件贴到三维模型的表面上,显示出该模型的微观细节和纹理特征。模型的材质与贴图能够反映出现实生活中对象的基本属性。
   下面给出水声通信网中常用的三维模型,本例主要采用多边形建模的方式,结合创建基本几何体建模和布尔运算等方法来构建实体模。模型如下图1所示:
  3.2 3ds模型文件的导入
  运用3ds MAX建立运动节点的三维模型之后,下一步就要考虑如何将3ds MAX产生的3ds模型文件导入到VS2010中,运用OpenGL绘制在显控界面上。有多种方法可以将三维模型导入到OpenGL程序中,有读取3DS文件格式的方法读入节点模型和用3D文件转换工具转换的方法读取节点模型[8],通过比较两种方法的优劣,本文采用第二种方法。
  这里我们将专业建模软件3ds MAX建立的运动节点模型文件通过Deep Exploration文件转换工具进行转换,转换成所需的模型文件格式导入到OpenGL中。
  4 系统设计与实现
  4.1 海洋虚拟场景显示系统框架
  根据现实的需求,海洋虚拟场景显示系统,主要可以分为两个方面:
  1、对海洋场景的模拟
  水声通信网络的使用环境为海洋,所以在进行节点的导入之前,需要先绘制出模拟的海洋环境。这个过程有可以有为三个方面,即海底、海水和网络节点的模拟。通过调用OpenGL的库函数,实现对基本场景的绘制。
  通过纹理映射技术的海底及背景填充处理的海水生成的效果如图2所示:
   图2中海水海底的分界线过于清晰,使整个效果看起来略显突兀,通过雾化处理,得到的图3成功的解决了这一问题,使人看起来海水更具沉浸感。
  光照处理后的效果如下图4所示:
  对比光照处理之前,整个效果显得明亮,更加接近自然效果。
  2、运动节点的导入
  本设计的主要功能就是实现对运动节点的显示级控制,海洋场景建立完成之后,就要建立并导入三维运动节点。
  导入潜艇后的效果图如5所示:
  导入另外四个运动节点的效果如图6所示:
  按照3.2节中所述方法导入了潜艇、AUV、舰船、潜标和浮标,导入的过程需要预先设定好特定节点的深度及位置信息,如舰船浮于水面之上,潜标要沉于水底,浮标要部分露出水面。
  4.2 人机交互设计
  当需要对场景操作时,就需要设计人机交互模块。这一部分主要包括系统对鼠标和键盘的响应实现观察者视角的变化,以及通过一个对话框实现对任意一个运动节点的轨迹的定制。
  4.2.1 场景漫游功能
  如果要进行平移变化,程序通过消息响应函数响应键盘上对应的方向键,每当按下一个方向键,就会记录下的视点变化量x_change和y_change,然后再利用平移变换函数gluLookAt()函数实现在相应的平移操作。
  旋转操作通过鼠标左键按下并且左右移动实现,当鼠标左键按下,并且拖动鼠标平移,视图类中的消息响应函数OnMouseMove就会响应并且记录下鼠标的旋转角度z_angle,即繞Z轴旋转的角度。
  程序中实现该操作的函数如下:
  gluLookAt(x+x_change,0,y-y_change,m_xMove,0,-m_yMove,0,1,0);
  在程序中通过对鼠标轮的滑动设置消息响应函数OnMouseWheel(UINT nFlags,short zDelta,CPoint pt)记录缩放倍数m_scale,先判断鼠标滚轮的滚动方向,向上滚动时设置缩放比例参数m_scale成倍增大,向下滚动时设置参数m_scale成倍减小。函数glViewport(x,y,w,h),其中的参数为视口的左下点坐标和长度、宽度,在OpenGL中使用它可以设置场景的视口范围。最后通过调用glViewport()函数控制视口平面的大小和位置,实现了在屏幕中显示视口平面的全部或部分区域,借此完成缩放的观察效果。   4.2.2 运动节点轨迹定制
  在水声通信网中的运动节点都能够按照预设的轨迹进行运动,本文的最终目的也就是实现对运动节点的轨迹的定制。
  本软件的设计过程中假定可以预设三个连续的运动目的点,每个目的点都可以设置其三维坐标值x,y,z以及在通往该节点的路线上的运动速度。
  运动节点轨迹的定制是通过对话框进行人机交互的,首先需要在菜单栏中添加相应的子菜单,以便调用该对话框,菜单栏和对话框的关联是通过设置其ID为相同的值实现的。
  定制节点运动轨迹的对话框如下图7所示:
  建立对话框的同时需要新建一个类MyDialog来记录对话框中的数据,当点击确定按钮时,就会将对话框中的数据传递到视图类的函数中,然后就可以通过调用OpenGL的函数达到运动节点按照轨迹移动的动态效果,具体的实现步骤如下:
  1、传递回对话框中的数据,包括节点类型,运动轨迹点的x,y,z的坐标以及速度值。
  2、在定时器中不停地更新下一时刻对应节点的x,y,z的坐标相对变化值dx,dy,dz,然后将当前时刻的坐标值m_px, m_py, m_pz分别加上dx,dy,dz就得到下一时刻节点的坐标值m_px, m_py, m_pz。
  3、最后在绘图函数GLDraw3D中通过调用函数glTranslatef(m_px,m_py,m_pz)实现对运动节点位置的重新绘制。
  运动节点轨迹定制主要有兩个方面的用途,一方面可以根据外部节点上自带的GPS传回的位置信息实时的绘制节点的运动轨迹,另一方面可以通过显控平台对节点的轨迹的进行定制,实现对外部无人节点的遥控操作,进一步提高了软件的实用性。
  5 结束语
  本文运用OpenGL标准图形库,在软件开发开发平台VS2010上,编程实现了对整个海洋场景的模拟,最后将3ds格式的模型导入场景。通过对整个显控界面的仿真,编程建立虚拟的海水场景和节点模型,最后给出了显控界面的仿真效果图。为了进一步的实现对运动节点轨迹的控制,又添加了人机交互模块和运动轨迹定制对话框,最终基本实现了预期的目标。
  参考文献
  1. 魏昕,赵力,李霞,邹采荣.水声通信网综述[J].电路与系统学报,2009,14(6):96-102P.
  2. 蒋志忠,熊宗接,马延平,杨日杰.水下作战网络综述[J].指挥控制与仿真,2009,32(2):5-7P.
  3. 李长春,戴国洪.基于VC + +与OpenGL的三维图形环境的构建[J].电脑开发与应用,2004,17(6):10-13P.
  4. 吴慧欣,毋建宏,薛惠锋.基于OpenGL的交互式三维建模仿真应用研究[J].计算机工程与设计,2006,27(3):376-378P.
  5. 夏炎.基于分行的三维海浪、云和火焰建模算法研究与实现.沈阳:沈阳理工大学,2009.
  6. 黄东明,张友龙.中文版3ds max 7三维设计与制作教程[M].北京:中国林业出版社.2006:12-184P.
  7. 芦欣.基于3DS Max和OpenGL实现飞行仿真的软件研发.内蒙古:内蒙古工业大学,2007.
  8. 李新,李珊珊. 3ds模型在OpenGL中的读取和重绘[N].首都师范大学学报,2008-4(2).
其他文献
摘要:近年来,随着电网升级改造政策和技术的推进,自动化、智能化的配网技术成为当前电网建设工作中的重要内容,配网自动化技术即利用计算机技术、通讯技术以及自动控制技术等高性能的通讯设备和技术,对配电电网进行在线或者离线操作与监控的技术运用。配网自动化技术的运用能够保证电网在相对安全、高效、经济的状态下运行,提高供电质量和供电安全性、稳定性。本文通过对配网自动化技术的发展以及技术要点展开分析,讨论配网自
期刊
摘要:不停电作业,是以实现用户的不停电或短时停电为目的,采用多种方式对设备进行检修的作业。其作业方式可分为绝缘杆作业法、绝缘手套作业法和综合不停电作业法。而在配网不停电作业中最基础的作业项目就是带电断、接引线工作,断引后,可由带电工作转化为普通停电工作。现主要分析绝缘杆作业法在10kV农网不停电作业中的应用。  关键词:绝缘杆作业法;配网不停电;作业  引言:10kV配电网是直接面向用户供电的基础
期刊
摘要:本文主要分析了电力输配电线路方面相关的影响因素,重点介绍了针对电力输配电线路的运行维护措施以及故障排除的方案,比如对于输配电线路施工前期的准备工作以及定期的维护工作等。通过对于电力输配电线路的运行维护以及故障排除工作,对于降低输配电线路事故发生的几率,提高电路的运行传输效率具有十分积极的作用。  关键词:输配电线路;电力系统;运行维护;故障排除  引言  对于人们在用电这一块的问题,最主要就
期刊
摘要:配电系统作为直接面向和影响客户安全可靠用电的终端网络,是整个电力网络不可或缺的关键环节,作用十分重要。随着电力行业的发展、建设投入增加,我国配电系统设备和技术水平得到提升,体现其间的自动化科技进步,有效促进配电网改善。但实际工作实践中,仍存诸多问题不足,需对配电自动化系统完善管理,提高运行水平,由此对电力企业配电自动化和管理提升提出可行建议。  关键词:电力配电、自动化、管理措施  电力企业
期刊
摘要:当前我国电力事业智能电网建设水平不断提高,其中继电保护技术发挥了重要作用。文章对智能电网环境下继电保护面临的挑战进行分析,并探讨机电保护技术的具体应用和发展趋势。  关键词:智能电网;继电保护;保护技术;电网保护  引言  电力企业的快速发展满足了人们用电需求,扩大电网建设范围与资金投入。这是基于这一背景下,推动了智能电网的发展。智能电网中,继电保护作为重要组成部分引进继电保护技术进一步推动
期刊
摘要:变电运行或者安全监管人员对进站工作的外单位施工人员资质的审核监管,主要是依据OA系统中的安全监管部发文,提前在巡維中心对照发表逐一对照核对,或者把发文打印在现场对照核查,工作效率低容易遗漏,对新要求下进站作业人员的信息了解有限,为人身及电网安全留下隐患。  关键词:人员信息;管理;B/S  一、 总体思路  本项目设计与实现采用的是B/S 的架构。随着网络技术的飞速发展,B/S 结构的系统的
期刊
摘要:目前,随着人们的生活质量在不断的提高,对于用电的需求在不断的加大,在智能电网发展趋势下,配电网电力电子装备的互联水平和网络化水平逐步提升,为智能集中抄表、远程数据监控等提供了有力支持。本文首先对配电网电力电子装备进行研究,并分析其通信系统建设现状及发展趋势,在此基础上,探讨配电网电力电子装备互联及网络化的关键实现技术,包括系统架构设计、即插即用功率接口应用、能量路由器应用、开放标准操作系统等
期刊
摘要:医院的专业性较强,长期以来,医院的权威性与实力评价几乎完全取决于医生队伍的建设,有时还包括护士队伍的建设。但对于医院后勤人们重视程度不够高,对于其团队建设和人力资源管理都缺乏关注,也不会投入大量的时间和精力资金致力于改善医院后勤。本文着眼于医院后勤的团队建设和人力资源管理,对其现状和改进策略进行简要的分析和论证,期望能够为广大的医院后勤从业者和有志于从事医院后勤研究工作的学者提供借鉴和参考。
期刊
摘要:电网工程物资是供电企业电网建设工作的运行基础,同时也是供电企业服务质量的发展根本,其对电网系统整体的安全性、稳定性、可靠性和经济性具有重要的保障作用。据此,在当前社会电力需求日益膨胀的时代背景下,我们有必要对电网工程物资合同履约精益管控对策进行分析研究,致力于寻找出能有效提升物资采购效率、强化物资供应能力的有效方法。  关键词:电网工程;物资管理;违约行为  引言:做好电网工程的物资合同履约
期刊
摘要:对于电力系统而言,继电保护装置是十分重要的,是整个电力体系的重要组成部分。继电保护和传统的分段式过流保护有着很大的不同,继电保护可以有效的提升配电系统的工作效率,保障整个电力系统的正常运作,进而促进人们更好的进行生产生活,为了保证电力系统的稳定和安全,本篇文章特别对配电线路全线速切继电保护进行了深入的探讨和阐述。  关键词:配电线路;全线速切;继电保护  原有的继电保护装置大多采用的是分流式
期刊