基于 OSG 的海洋漫游场景开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于 OSG 的海洋漫游场景开发
陈宁;聂垒鑫;刘炜;龚嫚;王之民
【摘要】针对海上环境气候复杂,模拟困难等原因,本系统在基于OSG三维渲染引擎的基础上,借助OsgOcean场景实现了第一视角的海洋场景漫游,包括船舶模型的调换,天气变化,键盘事件响应来控制船舶运动。
首先通过将OSG视景窗口嵌入MFC框架下,并在OSG核心类cOSG中响应海洋场景的生成;其次在模型节点中通过添加和移除节点,动态实现船舶模型的加载和转换,然后通过天空盒中阳光在海面产生的不同光照效果,利用着色器,渲染不同气候下海面的颜色;最后通过OSG三维渲染引擎中的粒子效果,将自定义粒子模块实时加载到场景中,用来模拟大自然中的雨、雪效果。
%Since the maritime environment is complicated and it is difficult to simulate , an ocean scene ramble system has been designed based on the OSG 3-D rendering engine and osgOcean .The system included the fol-lowing functions:switch of ship models , weather variations and ship movements controlled through keyboard e-vents response .At first, the OSG view window was embedded in the MFC framework , the ocean scene was gen-erated in the core class cOSG , then by adding and removing the model nodes , ship models were loaded and switched dynamically .After this,the color of ocean surface under different climates was rendered by the shader based on the light reflection and refraction of the ocean surface .At last,the rain and snow effects were simulated by adding the particle system of OSG rendering engine to the ocean scene .
【期刊名称】《江苏科技大学学报(自然科学版)》
【年(卷),期】2013(000)004
【总页数】5页(P386-390)
【关键词】OSG;海洋漫游;船模
【作者】陈宁;聂垒鑫;刘炜;龚嫚;王之民
【作者单位】江苏科技大学能源与动力工程学院,江苏镇江212003;江苏科技大学能源与动力工程学院,江苏镇江212003;江苏科技大学能源与动力工程学院,江苏镇江212003;江苏科技大学能源与动力工程学院,江苏镇江212003;江苏科技大学能源与动力工程学院,江苏镇江212003
【正文语种】中文
【中图分类】U664.82;TP391.9
虚拟仿真实际上是一种可创建和体验虚拟世界的计算机系统.此种虚拟世界由计算机生成,可以是现实世界的再现,亦可以是构想中的世界,用户可借助视觉、听觉及触觉等多种传感通道与虚拟世界进行自然的交互.它是以仿真的方式给用户创造一个实时反映实体对象变化与相互作用的三维虚拟世界,通过三维眼镜、数据手套等辅助传感设备,提供用户一个观测虚拟世界并与之交互的三维界面。
用户可直接参与探索仿真对象在所处环境中的作用与变化,并产生沉浸感.目前常用的视景仿真软件有Vega,QUSET 3D,Creator等,但是OSG相比它们来讲,仿真效率更高,渲染效果更加优秀.
OSG是一个开源的场景图形管理开发库,主要为图形图像应用程序的开发提供场景
管理和图形渲染优化功能.它使用可移植的ANSI C++编写,并使用已成为工业标准的OpenGL底层渲染API.因此,OSG具备跨平台性,可以运行在Windows,Max OS X和大多数类型的UNIX和Linux系统上.OSG是公开源代码的,它的用户许可方式为修改过的GUN宽通用公共许可证.
1 系统框架及海洋场景的生成
本系统是利用MFC结合OSG实现海洋场景.利用OSG2.8.2和VC2008平台,编译OsgOcean1.0.1,并与MFC框架结合,开发了海洋漫游系统.系统框架如图1.
图1 系统框架Fig.1 System framework
OsgOcean是欧盟VENUS计划中的一部分开源代码,利用CMake软件编译OsgOcean1.0.1,把生成的OsgOcean.dll文件导入OpenSceneGraph-2.8.2的bin目录下,通过VC2008平台就能把OsgOcean移植到MFC中实现人机交互[1,5-6,8-9].
利用OSG中的智能指针osg::ref-ptr定义两个变量oceanSurface和oceanScene,并分别赋值:
oceanSurface=new osgOcean::FFTOceanSurface(64, 256, 17, osg::Vec2f(1.1f, 1.1f),12.0f,1000.0f, 0.8, 1e-8, true, 2.5, 10.0f, 256);∥参数含义(网格大小,分辨率,网格个数,风向,风速,海面深度,放射衰减,浪的大小,是否波动,波动幅度,循环时间,帧数)
oceanScene=new osgOcean::OceanScene(oceanSurface);
添加对应的事件操作器:
viewer->addEventHandler(oceanSurface->getEventHandler());
viewer->addEventHandler(oceanScene->getEventHandler());
添加相机操作器,并设置观察者的位置、视点和方向,最后把场景添加到viewer,即显示窗口.
添加天空盒、水花及反射,嵌入MFC结构中,生成OsgOcean场景,点击生成海洋.
运行VC2008,效果如图2.
图2 osgOcean效果Fig.2 OsgOcean scene
图3 OsgOcean场景组织Fig.3 Design of OsgOcean scene
2 系统功能
2.1 船舶模型的加载
在虚拟仿真动画中,船舶的运动是由矩阵操作的,需要实时对船舶的位置和姿态进行
回调,以便实现船舶在海洋场景的运动.在OSG中,设置有
osg::Node,osg::Drawable,osg::Camera等的回调.通常osg::Node可以在OSG
执行更新和拣选遍历时进行回调;而osg::Drawable可以在拣选和绘制遍历时进行
回调;osg::Camera可以在更新遍历时进行回调.在osg::NodeCallback类中,操作operator()非常关键,回调的操作代码都在其中.virtual void
operator()(osg::Node* node, osg::NodeVisitor* nv){traverser(node,nv);},第1个参数是关联的节点地址,第2个参数是节点访问器[2].
创建回调方案如下:
1) 编写继承自osg::NodeCallback类的新类class BoatPositionCallback.定义回调函数:class BoatPositionCallback: public osg::NodeCallback;
2) 重载operator()方法,实现场景的动态更新.定义船舶运动矩阵osg::Matrix mat,赋值mat=osg::computeLocalToWorld(nv->getNodePath()),得到回调节点
的绝对坐标.定义float类型的变量height和osg::vec3f类型的normal,赋值height=oceanScene->getOceanSurfaceHeightAt(pos.x(), pos.y(), &normal),实时传递海面的高度,并把mat赋值给船舶模型节点mModel,就能实现船舶随海
面高度变化而变化的效果.
3) 初始化一个回调实例,关联到对象.在MFC框架中定义cOSG类,这个类是实现
OSG渲染的功能函数,在cOSG类中定义函数void cOSG::AddContainership(),在其中设置回调实例,setUpdateCallback(new BoatPositionCallback);据类似原理,本系统加载了游轮、集装箱船和拖船3种船型,运行效果如图4.
a) 游轮
b) 集装箱船
c) 拖船图4 3种船型的调换Fig.4 Switch of three kinds of ships
2.2 天气控制
本系统可以实现3种天气的转换,实现原理是对3种天气的天空体进行贴图,并设置有海面,浪花,雾,阳光颜色及阳光发散效果.3种天气效果如图5.
a) 阴霾
b) 黄昏
c) 晴朗图5 3种天气的转换Fig.5 Switch of three different weathers
雨雪效果利用OSG粒子系统进行模拟实现,osgParticle能够高效模拟粒子系统,生成非常真实的效果.在OSG预定义的粒子系统中,大部分采用的是布告板与色彩融合技术生成粒子.本系统定义了一个class RainAndSnow类管理天气,利用osgParticle::PrecipitationEffect定义两种天气peRain和peSnow,并把浓度设置为0.5.代码为peRain->rain(0.5f),peSnow->snow(0.5f),把它们添加到场景管理节点中,实现动态的控制天气.实现效果如图6.
a) 雨景
b) 雪景图6 雨雪场景效果Fig.6 Effects of rain and snow
在天气控制函数中添加m-fdensity变量,并添加键盘事件响应,每次按下“+”按键,对应的m-fdensit变量会自增,m-fdensity+=0.1,再利用peRain->rain(m-fdensity),peSnow->snow(m-fdensity)以实现雨雪的动态控制.效果如图7.
a) 雨景
b) 雪景图7 m-fdensity为1.8时的雨雪效果Fig.7 Rain and snow scene when M-fdensity is 1.8
2.3 视点跟随
视点跟随原理是将船舶运动矩阵和相机(视口)矩阵关联起来,使船舶运动和视角观察矩阵同步,根据这个原理本系统定义了一个视点跟随矩阵class Follow继承自osgGA::MatrixManipulator类,把船舶运动矩阵mat传递给相机矩阵[3-4].其中virtual void setByMatrix (const osg::Matrixd &matrix),virtual void setByInverseMatrix (const osg::Matrixd &matrix),virtual osg::Matrixd getMatrix(),virtual osg::Matrixd getInverseMatrix () 4个虚函数是实现跟随的关键.在getMatrix()函数中mat=osg::Matrixd::rotate(osg::PI-2, osg::Vec3(1, 0, 0)) * osg::Matrix::translate(m-vPosition) * cameraMatrix,先旋转世界坐标系,平移到船舶上适合的位置,按照船舶的运动矩阵运动.
船舶位置的更新需要重载osgGA::MatrixManipulator中的handle()函数,即每帧更新矩阵位置,case(osgGA::GUIEventAdapter::FRAME):updateCametaMatrix(),每帧更新相机位置.如图8.
图8 视点跟随Fig.8 Viewpoint attachment
2.4 实验室平台的使用
视景渲染工作结束以后,通过预留的外部接口,将Matlab中Simulink模块的实船运动数学模型计算结果从数据库中读取出来并赋值给船舶运动矩阵,相应的车钟信号和油门信号通过研华采集卡采集并转为数字信号传递给数据库,再从数据库传递给Simulink模型的输入端,实时仿真船舶运动,如图9.
图9 三维立体船舶驾驶模拟器运行效果Fig.9 Rendering of three-dimensional ship driving simulator
3 结论
目前,OSG可以在多种平台及操作系统上运行,作为一门近几年才发展起来的新兴仿真工具,已经得到了国内外多公司和研究机构的关注.OSG已经应用于高端制造,虚拟装配,虚拟展示,教育学习,数字城市等方面[7,10].OSG结合了计算机图形学,空间矩阵原理和计算机编程技术,通过本系统的开发得出以下结论:
1)利用OsgOcean和MFC的结合,实现了可以人机交互的海洋场景漫游;
2)通过搭建海洋场景的视景仿真,实现了键盘和数据库控制船舶运动,包括航向、速度,实现了风雪气候转换、视角切换,以及船舶模型动态更换.
参考文献
[1] Tessendorf J.Simulating ocean water[C]∥P roceeding of ACM SIGGRAPH.New York: ACM Press,2001:348-367.
[2] 肖鹏,刘更代,徐明亮. OpenSceneGraph三维渲染引擎编程指南[M]. 北京:清华大学出版社,2010:227-228.
[3] 陈宁,吕庆伦,孙玉科. 基于OSG的视点跟随技术在船舶驾驶仿真系统中的应用[J]. 船舶工程, 2011,33(6): 53-57.
Chen Ning, Lü Qinglun, Sun Yuke. The application of vie wpoint follow technology in ship driving simulation system based on OSG[J].Ship Engineering,2011,33(6): 53-57. (in Chinese)
[4] 吕庆伦. 基于OSG的船舶驾驶系统视觉仿真研究[D].江苏镇江:江苏科技大学,2010: 35-39.
[5] 陈兴峰, 顾行发, 程天海,等. 真实海洋表面的太阳耀光偏振辐射特性仿真与分析[J]. 光谱学与光谱分析, 2011,31(6):1648-1653.
Chen Xingfeng, Gu Xingfa, Cheng Tianhai, et al. Simulation and analysis of polarization characteristics for real sea surface sunlight[J].Spectroscopy and Spectral Analysis,2011,31(6):1648-1653.
[6] 陈戈, 李文庆, 李小宁. 交互式VR-ocean虚拟海洋环境与生命仿真平台的设计与实现[J]. 中国海洋大学学报,2009,39(5):1037-1041.
Chen Ge, Li Wenqing, Li Xiaoning. Design and implementation of an interactive VR-ocean platform for ocean environment and marine life simulation[J]. Periodical of Ocean University of China,2009,39(5):1037-1041. (in Chinese)
[7] Cha J H, Roh M I, Lee K Y. Integrated simulation framework for the process planning of ships and offshore structures[J].Robotics and Computer-Integrated Manufacturing,2010,26(5): 430-453.
[8] 杨松林, 李慧蕾, 李坤, 等. 虚拟海浪海洋环境模拟方法及应用[J]. 江苏科技大学学报:自然科学版, 2012,26(3):213-217.
Yang Songlin, Li Huilei, Li Kun, et al. Virtual wave and marine environment simulation method and its application[J].Journal of Jiangsu University of Science and Technology:Natural Science Edition,2012,26(3):213-217. (in Chinese)
[9] 谷家扬, 缪振华. 随机海浪中船舶安全概率的数值模拟[J]. 江苏科技大学学报:自然科学版, 2005,19(6):6-11.
Gu Jiayang, Miao Zhenhua. Numerical simulation of ship′s safe probability in stochastic waves[J].Journal of Jiangsu University of Science and Technology:Natural Science Edition,2005,19(6):6-11.(in Chinese)
[10] 刘炜, 陈宁. 基于碰撞检测的坦克运动与地形匹配性研究[J]. 江苏科技大学学报:自然科学版,2012,26(4): 357-360.
Liu Wei, Chen Ning. Matching degree between tank′s motion and terrain based on the technology of intersection detective[J].Journal of Jiangsu
University of Science and Technology:Natural Science Edition,2012,26(4): 357-360.(in Chinese)。