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

news/2024/4/26 6:12:49/文章来源:https://blog.csdn.net/vcit102/article/details/129160190

基于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
————————————————
版权声明:本文为CSDN博主「笑舞阳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sky_fireblue/article/details/111990977

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72572.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DO-254 和 DO-178B的区别(文末有易灵思核心板及配套下载线)

DO-178B介绍 DO-178B,机载系统和设备认证中的软件考虑,在电子硬件被要求符合 DO-254 之前多年就已发布和采纳。DO-178B 的先行一步对电子硬件开发带来两个特别的后果。首先,使得硬件制造商有了一种倾向,为了避免 DO-178B 对软件开…

【MySQL】sql中explain解释和应用

这里写目录标题学习原因MySQL中explain的使用和用法解释explain的使用explain 运行结果的意义文字展示表格展示参考资料:结束语学习原因 在对sql的优化过程中使用了explain对指定的sql进行查看它的运行效果,以便找出sql的性能特点并进行优化 MySQL中ex…

Linux - POSIX信号量,基于环形队列的生产者消费者模型

信号量在Linux下,POSIX信号量是一种线程同步机制,用于控制多个线程之间的访问顺序。POSIX信号量可以用于实现线程之间的互斥或者同步。在之前的阻塞队列生产者消费者模型中,阻塞队列是一个共享资源,不管是生产者还是消费者&#x…

Mysql实战之日志系统:一条SQL更新语句是如何执行的

1.前言 上一篇咱们了解了MySQL 的执行过程,其中设计连接器、分析器、优化器、执行器和存储引擎,接下来我将给大家讲解一下在MySQL中一条更新语句是如何执行。我相信大家可能听公司的DBA提起过,可以将数据恢复到半个月内任意时间的状态&#…

Scala集合详解(第七章:集合、数组、列表、set集合、map集合、元组、队列、并行)(尚硅谷笔记)

集合第七章:集合7.1 集合简介7.1.1 不可变集合继承图7.1.2 可变集合继承图7.2 数组7.2.1 不可变数组7.2.2 可变数组7.2.3 不可变数组与可变数组的转换7.2.4 多维数组7.3 列表 List7.3.1 不可变 List7.3.2 可变 ListBuffer7.4 Set 集合7.4.1 不可变 Set7.4.2 可变 mutable.Set7.…

Android system实战 — Android R(11) 进程保活白名单

Android system实战 — Android R 进程保活白名单0. 前言1. 具体实现1.1 准备工作1.2 源码实现1.2.1 源码1.2.2 diff文件0. 前言 最近在Android R上实现一些需求,进行记录一下,关于进程保活的基础知识可以参考Android system — 进程生命周期与ADJ&#…

自动驾驶路径规划概况

文章目录前言介绍1. 路径规划在自动驾驶系统架构中的位置2. 全局路径规划的分类2.1 基础图搜索算法2.1.1 Dijkstra算法2.1.2 双向搜索算法2.1.3 Floyd算法2.2 启发式算法2.2.1 A*算法2.2.2 D*算法2.3 基于概率采样的算法2.3.1 概率路线图(PRM)2.3.2 快速…

蓝牙运动耳机什么牌子的好、运动蓝牙耳机排行榜推荐

近些年,户外运动兴起,运动耳机迎来爆发增长,拒绝运动乏味,追求健康运动方式,已经成为当下年轻人的共同诉求。跑步骑行听音乐,已经是运动爱好者再熟悉不过的操作,很多人在运动中离不开音乐的节奏…

代码随想录算法训练营第七天 | 454.四数相加II 、 383. 赎金信、15. 三数之和、18. 四数之和 、总结

打卡第七天&#xff0c;还是哈希表。 今日任务 454.四数相加II383.赎金信15.三数之和18.四数之和总结 454.四数相加II 代码随想录 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, ve…

【vue2每日小知识】实现directive自定义指令的封装与全局注册

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;将我们的自定义指令directive统一管理并批量注册 目录 一、directive自定义指令介绍 二…

DS期末复习卷(六)

一、选择题(30分) 1&#xff0e; 设一组权值集合W{2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6}&#xff0c;则由该权值集合构造的哈夫曼树中带权路径长度之和为&#xff08; D &#xff09;。 (A) 20 (B) 30 (C ) 40 (D) 45 W(23)*3(456)*245 2&#xff0e;执行一…

Python、Java、JavaScript、C、Go等编程语言如何实现“定时器”功能

这是CSDN平台2月推出的一个活动(活动链接为&#xff1a;CSDN 征文活动)&#xff0c;聊聊时间的话题&#xff0c;小编我也不知道有什么好聊的时间的话题&#xff0c;看了CSDN给出的部分话题上&#xff0c;有一个这样的话题&#xff0c;如何用各种编程语言实现“定时器”&#xf…

GUI可视化应用开发及Python实现

0 建议学时 4学时&#xff0c;在机房进行 1 开发环境安装及配置 1.1 编程环境 安装PyCharm-community-2019.3.3 安装PyQt5 pip install PyQt5-tools -i https://pypi.douban.com/simple pip3 install PyQt5designer -i https://pypi.douban.com/simple1.2 环境配置 选择“…

JVM13命令行

2. JVM 监控及诊断工具-命令行篇 2.1. 概述 简单命令行工具 在我们刚接触 java 学习的时候&#xff0c;大家肯定最先了解的两个命令就是 javac&#xff0c;java&#xff0c;那么除此之外&#xff0c;还有没有其他的命令可以供我们使用呢&#xff1f; 我们进入到安装 jdk 的…

【11】FreeRTOS的延时函数

目录1.延时函数-介绍2.相对延时函数-解析2.1函数prvAddCurrentTaskToDelayedList-解析2.3滴答定时器中断服务函数xPortSysTickHandler()-解析2.4函数taskSWITCH_DELAYED_LISTS() -解析3.延时函数-实验4.总结1.延时函数-介绍 函数描述vTaskDelay()相对延时xTaskDelayUntil()绝对…

CTFer成长之路之SSRF漏洞

SSRF漏洞CTF SSRF Training 题目描述: web容器中存在一个flag&#xff0c;mysql中存在一个管理员账号密码&#xff0c;其余容器中均没有特定flag mysql容器中内置 tcpdump vulnweb容器中内置一个 fpm.py 攻击脚本 docker-compose.yml version: "3" services:w…

Spring代理模式——静态代理和动态代理

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

笔记本电脑电池和充电器CE认证IEC62133测试

EC 符合性声明 - 您可以从品牌所有者或欧盟境内的商品官方进口商处获取此文件。证明您的商品经过检测符合下表所列标准的文件。您也可以从品牌所有者或欧盟境内的官方进口商处获取此文件。原品牌的笔记本电脑或手机&#xff08;如三星、苹果、戴尔、惠普等&#xff09;提供的原…

【验证码的识别】—— 点触式验证码的识别

一、前言 大家好&#xff0c;不知不觉的我来csdn已经又一周年了&#xff0c;在这一年里&#xff0c;我收获了很多东西&#xff0c;我是2022年2月22日入驻CSDN的&#xff0c;一开始只是为了方便浏览文章的&#xff0c;后来&#xff0c;我也有事没事发发文章&#xff0c;创作了1…

leetcode 1011. Capacity To Ship Packages Within D Days(D天内运送包裹的容量)

数组的每个元素代表每个货物的重量&#xff0c;注意这个货物是有先后顺序的&#xff0c;先来的要先运输&#xff0c;所以不能改变这些元素的顺序。 要days天内把这些货物全部运输出去&#xff0c;问所需船的最小载重量。 思路&#xff1a; 数组内数字顺序不能变&#xff0c;就…