随着科技的不断发展,人工智能(AI)和虚拟现实技术(VR)已经逐渐成为当前的热门领域,吸引了很多人相继投身于其中.三维虚拟学校系统基于Open Scene Graph(简称OSG,三维图形引擎)和NB-IoT通信网络,是在现代3D图形仿真和通信产业正当兴起的情况下来建设的.主要面向大学生群体,提供了一个直观认识学校的良好的印象.比如学生在入学前了解学校、各院实验室参观时,能够提供详尽的地图导航,引领你走遍学校的每一个细节.通过对视口的切换,改变天气,以及自由漫游路线,可记录下不同的美丽路径,方便以后漫游,能够最直观地认识学校. 关键词:open scene graph,物联网,3D仿真
传统的高校宣传大多是通过印刷文字和图片结合的宣传页来进行宣传的,学校各类情况信息的介绍还仍停留在图片与文字相结合的层面上,只能通过静态的方式进行信息展示,不够生动,形象和直观.同时,学校是一个大型区域,各类信息都在动态变化,而且,为了跟随并适应社会发展和增强自身的竞争能力,学校在各方面不断地进行改革,种种变化都给学校的管理工作带来了很多麻烦,也会对学校外来人员甚至学校自身包含的学生带来不便.所以,学校急需改变目前的现状,从而向大众更加生动形象地宣传和推广自身.随着科技的不断发展,人工智能(AI)和虚拟现实技术(VR)日渐成熟,为我们解决上述问题提供了帮助,本文所设计的三维虚拟学校系统就是基于Open Scene Graph在虚拟现实技术(VR)领域和无线通信技术来建设的.三维虚拟校园系统可以从校园环境及时更新、加强学生与学校之间的沟通、存储大量信息三个方面解决以上所有问题并带给老师与学生更好的精神体验和情感体验,从而扩大学校办学影响力,提高学校的竞争力,树立良好的形象.
Open Scene Graph,是国外一名飞行员开发的开源C++库,用于实现3D模型的仿真场景开发.后来在400多名国内外程序员的共同开发下,它的规模越来越大,各种拓展包层出不穷,如:osgEarth,数字地球模拟;osgOcean,海洋流体模拟.
1)坐标系与矩阵osg坐标系是依据笛卡尔坐标系确认方向,其方向为:X向右,Y向里,Z向上.对虚拟场景中的三维物体实施标准变换,就是对物体本身的顶点矩阵实施变换.三维的坐标变换采用4*4矩阵,需要经过统一的平移和缩放为矩阵乘法的形式来计算. T=例如当需要旋转时,调用子矩阵:T=用于旋转操作.绕X轴旋转:[X Y Z 1]=[X Y Z 1]
2)场景节点树当用OSG建立一个场景时,是以节点树的方式,将做好的3D模型放入场景.通常的做法是在根节点root上添加Switch节点,该节点是开关节点,能够关闭该节点下的任意节点;在下面加入MatrixTransfrom节点,用于设置位移缩放等属性,和特效节点,该节点一般为雨雪效果或光源等节点;最后在MatrixTransfrom下面加入叶节点,也就是做好的3D模型.这样一层一层就能搭建一个场景树结构.最后在视景器viewer中viewer->setscenedata(root);便能直观地显示出3D模型,如图1所示。
想要在osg中实现键盘或鼠标点击事件,给用户带来更多选择,也就是切换摄像机位置和视角方向,必须通过矩阵方式改变传递参数值给摄像机设置.Osg中为开发者提供了相应的接口,osg:: CameraManipulator,继承自osg::EventHandler,中文名是操作器,能够实现对初始视点的定位,自由漫游,路径漫游等制作动画.
首先要设置开场视角,设置为透视视角.继承osgGA::CameraManipulator类,在构造函数中,设定类成员m_vPosition和m_vRotation,在得到矩阵方法getMatrix和getInverseMatrix方法中返回矩阵,返回给视景器viewer.如果初始视点设置不好,用户一进入界面,飞到地下或云朵上,就没有人性化的体验.通过setMatrix和setInverseMatrix的方法,同样输入矩阵就可以切换视点.
为了让用户能够实现如同CS游戏的第一人称漫游,按wasd实现移动,这里继承osgGA::CameraManipulator类,通过事件处理函数对public变量赋值进行操作.当得到键盘按键方法ea.getKey() == ‘’时,设置视点位置m_vPosition和方向m_vRotation,返回给视景器viewer.
摄像机按路线变化位置和视角.能够实现如同坐过山车一般的体验.Main函数中调用osg自带的osgGA::AnimationPathManipulator类,继承自osgGA::CameraManipulator.能够实现将设计好的路径动画传进去,这个操作器便能够创建视点移动动画,循环往复,自由设计,osg::ref_ptrosgGA::AnimationPathManipulator apm = new osgGA::AnimationPathManipulator(CreatePath());viewer->setCameraManipulator(apm);然后将预先设计好的路线传到AnimationPathManipulator中.
在osg中,想要实现动画,有骨骼动画,帧动画等方式.这里使用帧动画的方式在osg中制作动画,用到osg::AnimationPath类,通过对各个帧内时间和物体变化矩阵的插值,合成为动画.
Osg支持文字信息输出.可以以HUD的形式输出到界面上,当鼠标在屏幕滑动时,也就是从屏幕上发出一条射线,与 3D 模型的场景会有很多的交点,我们取最后一个交点为鼠标在世界坐标系中的坐标.之后得到该坐标的节点的场景图形的名字,便可以输出存放于数据库的信息.将该事件加入操作器中,可以实现鼠标点击出现信息的功能.
粒子系统目前主要用来模拟虚拟环境中的爆炸效果,火焰的燃烧效果或者一些流水现象,这里将该效果用来描述雨雪天气,由于该系统是由一些散装的微小粒子(较小物体)聚集起来,再在算法下沿着一定的方向移动,形成屏幕上呈现的效果.这里使用osg自带的osgParticle::PrecipitationEffect,在main函数中加入节点树,便可以看到雨雪效果.
设计虽然osg可以用于构建图像,但是过于精密的图像还是需要另外的设计软件,网络上百家争鸣,比较广泛的使用的有:Autodesk的3DMAX、CAD,或是MAYA、ZBRUSH.各色渲染性能各有不同.单从难易度上讲,我们选择3DMAX作为3D模型设计工具.3DMAX的应用领域众多,在此,我们利用3DMAX实现了在虚拟现实中的运用,用到其中的样条线、文本,材质编辑器、缩放等功能.实现了路线设计、三维字体设计、建筑中心坐标的设置和调整建筑物大小.尽可能比较还原地设计了真实学校。图4 衢州学院3Dmax透视图
基于NB-IoT实现远程通信.NB-IoT无线收发模块,是近几年流行起来的物联网模块,其主要功能是全球传感数据采集,连上基站,通过窄带网络将网络数据包发送给服务器.在当今中国网络基站遍布的状况下,理论上通信范围为无限远,我们采用移远公司的BC20模块,根据用户需求私人定制传感器连接,如摄像机数字图像处理检测停车位是否空闲后,BC20能够将信息打包发送至服务器,再加上VC++应用程序能够实现简单的UDP远程通信和SQL server数据库调用,能够在服务器上将无线传感器信息传入数据库,输出给图形界面.比如客户需求是校园内停车位情况数据采集.通过开启UDP端口识别进程后,应用程序对安置在停车位上的NB-IoT停车位检测装置传来的车位空闲情况的识别,应用程序自动修改数据库,osg渲染引擎对数据库的调用,将能够实现24小时的无休自动化工作.你随时能够在服务器上以3D图像的方式,比以往更直观地查阅到校园内动态停车信息展示.
1)通过3DMAX建筑建模,尽可能将校园建筑还原.
2)在osg图形界面中添加根节点和子节点,将3DMAX文件导入.
3)添加操作器和其他响应事件,使得用户能够获得更加人性化的漫游体验.
3)硬件传感器在校园各地安置,检测需要的数据,传给服务器.
4)将应用程序发至服务器,添加无线通信和数据库,将在各地采集的数据传入,在服务器上能够更加直观地看到数据.
5)软件性能优化,硬件定时维护.
Osg属于计算机图形学范畴,使用osg能够给数据带来最直观的表现.如果将在各地采集到的数据,以一种图形化的方式显示,则能够十分清晰地看到数据传输和动态,轻松掌握真实世界各地情报,为物联网的发展实现更进一步的飞跃. 参考文献
[1]OSG(OpenSceneGraph)安装.[OL]. https://www.jianshu.com/p/7fb0e414e1a9
[2]MFC HYPERLINK "https://www.cnblogs.com/wkfvawl/p/11101171.html"图形编辑界面工具.[OL]. https://www.cnblogs.com/wkfvawl/p/11101171.html
[3] SXEarth三维数字地球.[OL]. http://www.sxsim.com/h-col-106.html
[4] osg 场景漫游.[OL].https://www.cnblogs.com/herd/p/11125192.html
[5]osgEarth例子.[OL].https://www.cnblogs.com/coolbear/archive/2013/07/16/3192866.html
[6]杨化斌.OpenSceneGraph 三维视景仿真技术开发详解[M].北京:国防工业出版社.
[7]最常见的开源游戏引擎.[OL].http://www.open-open.com/lib/view/open1349767893947.html
[8] osg HYPERLINK "https://www.cnblogs.com/lyggqm/p/9505448.html"背景图设置.[OL].https://www.cnblogs.com/lyggqm/p/9505448.html