APP下载

基于OSG的海洋漫游场景开发

2013-11-19聂垒鑫王之民

关键词:视点虚拟世界定义

陈 宁, 聂垒鑫, 刘 炜, 龚 嫚, 王之民

(江苏科技大学 能源与动力工程学院, 江苏 镇江 212003)

虚拟仿真实际上是一种可创建和体验虚拟世界的计算机系统.此种虚拟世界由计算机生成,可以是现实世界的再现,亦可以是构想中的世界,用户可借助视觉、听觉及触觉等多种传感通道与虚拟世界进行自然的交互.它是以仿真的方式给用户创造一个实时反映实体对象变化与相互作用的三维虚拟世界,通过三维眼镜、数据手套等辅助传感设备,提供用户一个观测虚拟世界并与之交互的三维界面。用户可直接参与探索仿真对象在所处环境中的作用与变化,并产生沉浸感.目前常用的视景仿真软件有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) 拖船

2.2 天气控制

本系统可以实现3种天气的转换,实现原理是对3种天气的天空体进行贴图,并设置有海面,浪花,雾,阳光颜色及阳光发散效果.3种天气效果如图5.

a) 阴霾

b) 黄昏

c) 晴朗

雨雪效果利用OSG粒子系统进行模拟实现,osgParticle能够高效模拟粒子系统,生成非常真实的效果.在OSG预定义的粒子系统中,大部分采用的是布告板与色彩融合技术生成粒子.本系统定义了一个class RainAndSnow类管理天气,利用osgParticle::PrecipitationEffect定义两种天气peRain和peSnow,并把浓度设置为0.5.代码为peRain->rain(0.5f),peSnow->snow(0.5f),把它们添加到场景管理节点中,实现动态的控制天气.实现效果如图6.

a) 雨景

b) 雪景

在天气控制函数中添加m-fdensity变量,并添加键盘事件响应,每次按下“+”按键,对应的m-fdensit变量会自增,m-fdensity+=0.1,再利用peRain->rain(m-fdensity),peSnow->snow(m-fdensity)以实现雨雪的动态控制.效果如图7.

a) 雨景

b) 雪景

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]∥ProceedingofACMSIGGRAPH.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 viewpoint follow technology in ship driving simulation system based on OSG[J].ShipEngineering,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].SpectroscopyandSpectralAnalysis,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].PeriodicalofOceanUniversityofChina,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].RoboticsandComputer-IntegratedManufacturing,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].JournalofJiangsuUniversityofScienceandTechnology:NaturalScienceEdition,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].JournalofJiangsuUniversityofScienceandTechnology:NaturalScienceEdition,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].JournalofJiangsuUniversityofScienceandTechnology:NaturalScienceEdition,2012,26(4): 357-360.(in Chinese)

猜你喜欢

视点虚拟世界定义
虚拟世界和真实世界的纽带
虚拟世界大门正启
拥抱虚拟 珍惜现实
成功的定义
视点
让你每天一元钱,物超所值——《今日视点—2014精萃》序
两会视点
修辞学的重大定义
在虚拟世界关爱“小博友”
山的定义