基于open scene graph的虚拟校园系统的设计与实现

  • 摘要
  • •引言
  • • OSG基本原理
  • •OSG操作与动画
    • •视点的定位和切换
    • •自由漫游
    • •路径漫游
    • • 路径动画
    • • 点选和文字
    • • 粒子系统
  • • 3DMAX
  • • 无线通信与数据库设计
  • • 实现步骤
  • • 结论

摘要

随着科技的不断发展,人工智能(AI)和虚拟现实技术(VR)已经逐渐成为当前的热门领域,吸引了很多人相继投身于其中.三维虚拟学校系统基于Open Scene Graph(简称OSG,三维图形引擎)和NB-IoT通信网络,是在现代3D图形仿真和通信产业正当兴起的情况下来建设的.主要面向大学生群体,提供了一个直观认识学校的良好的印象.比如学生在入学前了解学校、各院实验室参观时,能够提供详尽的地图导航,引领你走遍学校的每一个细节.通过对视口的切换,改变天气,以及自由漫游路线,可记录下不同的美丽路径,方便以后漫游,能够最直观地认识学校. 关键词:open scene graph,物联网,3D仿真

•引言

传统的高校宣传大多是通过印刷文字和图片结合的宣传页来进行宣传的,学校各类情况信息的介绍还仍停留在图片与文字相结合的层面上,只能通过静态的方式进行信息展示,不够生动,形象和直观.同时,学校是一个大型区域,各类信息都在动态变化,而且,为了跟随并适应社会发展和增强自身的竞争能力,学校在各方面不断地进行改革,种种变化都给学校的管理工作带来了很多麻烦,也会对学校外来人员甚至学校自身包含的学生带来不便.所以,学校急需改变目前的现状,从而向大众更加生动形象地宣传和推广自身.随着科技的不断发展,人工智能(AI)和虚拟现实技术(VR)日渐成熟,为我们解决上述问题提供了帮助,本文所设计的三维虚拟学校系统就是基于Open Scene Graph在虚拟现实技术(VR)领域和无线通信技术来建设的.三维虚拟校园系统可以从校园环境及时更新、加强学生与学校之间的沟通、存储大量信息三个方面解决以上所有问题并带给老师与学生更好的精神体验和情感体验,从而扩大学校办学影响力,提高学校的竞争力,树立良好的形象.

• OSG基本原理

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中为开发者提供了相应的接口,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函数中加入节点树,便可以看到雨雪效果.

• 3DMAX

设计虽然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

基于open scene graph的虚拟校园系统的设计与实现相关推荐

  1. 基于OSG的虚拟校园系统的设计与实现

    基于open scene graph的虚拟校园系统的设计与实现 摘要 •引言 • OSG基本原理 •OSG操作与动画 •视点的定位和切换 •自由漫游 •路径漫游 • 路径动画 • 点选和文字 • 粒子 ...

  2. android日记 设计说明,基于Android的掌上校园系统的设计与实现毕业论文.doc

    中文题目:基于Android的掌上校园系统的设计与实现 外文题目:THE DESIGN AND IMPLEMENTATION OF A HANDHELD CAMPUS SYSTEM BASED ON ...

  3. 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  4. 基于微信小程序的西餐外卖系统的设计与实现NodeJS-计算机毕业设计

    题目:基于微信小程序的西餐外卖系统的设计与实现 功能要求:西餐外卖系统微信小程序可以实现店铺介绍,菜品展示.菜品分类.西餐的下单.查看订单.加购物车.地址管理等功能. 开发语言:微信小程序+node. ...

  5. 基于Vue和SpringBoot的论文检测系统的设计与实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  6. 基于蓝牙的家居网关数据采集处理系统的设计与实现

    王雅志 , 王绍源 ( 湖南大学 电气与信息工程学院 , 湖南 长沙 410082) 摘要 : 介绍了一种基于蓝牙技术的智能家居网关中数据采集处理系统的实现方案 , 该系统以 ARM - Linux ...

  7. 基于微信小程序的球鞋商城系统的设计及实现

    基于微信小程序的球鞋商城系统的设计及实现 后台springboot 前台模块: 登录:用户进入商场微信小程序系统,登陆小程序. 编辑收货地址:用户增加收货地址界面与修改收货地址. 商品详情页面:用户可 ...

  8. 基于Java+springboot+SSM的医疗报销系统的设计与实现

    项目开发工具: IDEA, MYSQL, JDK1.8 项目使用技术: SpringBoot, SSM, H-UI, JSP, JQUERY, HTML 医疗报销系统 [功能列表] [前台用户]登录, ...

  9. 基于微信小程序的教务查询系统的设计与实现

    目录 1 绪论 2 1.1 研究背景 2 1.2 教务查询系统的现状和发展前景 3 1.3 系统的技术架构 3 1.4 论文框架 4 2 系统需求分析 5 2.1 系统概述 5 2.2 系统功能需求 ...

  10. 基于Vue和SpringBoot的毕业生追踪系统的设计和实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

最新文章

  1. Eclipse的正确安装使用姿势
  2. python seek tell_Python指针seektell详解
  3. wchar.h not found
  4. mysql 查询临时表列名_为什么mysql会缓存被删除的临时表的列名?
  5. linux go语言运行环境,安装Go语言运行环境
  6. 4 Redis的发布订阅
  7. [蓝桥杯2016决赛]反幻方-next_permutation枚举
  8. JPA 2.1实体图–第1部分:命名实体图
  9. JAVA引用类型在变量槽,浅析Java的内存模型
  10. php天津旅游设计网站作品
  11. Ubuntu 20.04开机自启脚本(亲测)
  12. 8.BLE---错误码
  13. Python:实现sha256算法(附完整源码)
  14. 字符对应的URL编码值集合
  15. 如何开启 vue 项目
  16. AD18无法仿真问题的解决
  17. 分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月21日-5月26日)
  18. 浅谈大数据时代的大数据技术与应用
  19. vue根据后端菜单数据生成动态路由
  20. origin作图 基础中的基础 一图一opj

热门文章

  1. 使用ArcGIS软件对 .jpg 图片添加经纬网及地理配准失败的原因
  2. HTML分页插件功能实现
  3. html游戏网站设计报告,web前端课程设计以及报告,jquery+js+css+html
  4. linux bzip指定名称,Linux基础命令---bzip2
  5. OA无纸化办公系统对公司管理的作用
  6. 一文搞懂SPI通信协议
  7. 哄人必备-女友道歉信生成工具吾爱版
  8. 真值表-Python实现
  9. 我用Python写了一个论文降重工具
  10. 抖音康辉机器人_央视主持人太会玩!康辉录抖音,笑死了!