虚拟现实中的物理引擎ODE与虚拟引擎OSG结合探讨
更新时间:2023-08-09 05:14:01 阅读量: 综合文库 文档下载
- 常见的虚拟现实引擎推荐度:
- 相关推荐
第33卷第1期2010年2月
测绘与空间地理信息
GEOMATICS&SPATIALINFORMATIONTECHNOLOGY
Vo.l33,No.1
Feb.,2010
虚拟现实中的物理引擎ODE与虚拟
引擎OSG结合探讨
杨俊杰,臧淑英,姜美芳
(哈尔滨师范大学地理信息系统实验室,黑龙江哈尔滨150080)
摘要:随着社会的进步和科技的发展,传统技术及其赖以生存的经营方式正渐渐地发生细微的变化,这在混沌
学里被视为事情发生质变的一个不可忽视的因素。同样,开源物理引擎(opendynamicsengine)与虚拟引擎(openscenegraph)在这种变化中积极地上演着自身的角色,并不断拓展自己的 势力范围 。本文分别从两个引擎的角度进行了阐述,并将两者进行了有效地绑定,构建出能体现物理特性的虚拟环境。关键词:虚拟引擎;物理引擎;场景;碰撞检测
中图分类号:TP391.9 文献标识码:A 文章编号:1672-5867(2010)01-0066-03
DiscussionontheCombinationofOpenDynamicsEngineandOpen
SceneGraphinVirtualRealitySystem
YANGJun-jie,ZANGShu-ying,JIANGMei-fang
(GISLaboratory,HarbinNormalUniversity,Harbin150080,China)
Abstract:Alongwiththeprogressofsocietyandthedevelopmentoftechnology,traditionaltechniqueandthemannerofitsoperatinghaschangedgradually.InChaology,ithastobedefinedasimportantelementofthechange.Opensourceplaysparticularroleonit,suchasopendynamicsengineandopenscenegraph.Thispaperdescribesthemseperately,then,makesabindingbetweenthemfor
constructingvirtualrealitythatcontainsphysicalproperty.Keywords:virtualengine;physicalengine;scene;collisiondetection
0 引 言
虚拟现实技术允许用户通过外围设备和硬件来操纵虚拟环境中的物体,模拟现实环境中的物体形态、运动以及相应的声效等,使操纵者产生一种身临其境的感觉。虚拟现实系统是个广义的概念,它一般需要包含底层API、渲染引擎、文件读写、骨骼动画、声音模拟、粒子系统和物理引擎等模块。通过上述各个模块交互融合,产生效果逼真的现实模拟系统。
本文基于现有的技术和力量,针对OSG(openscenegraph,以下简称OSG)与ODE(opendynamicsengine,以下简称ODE)进行了基本的结合开发。OSG图形系统是一个基于工业标准OpenGL的软件接口,它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序,也就是说它仅仅是个图形引擎,开发者将它的工作重点
收稿日期:2009-10-16
基金项目:黑龙江省重大科技攻关项目(GA06A101-04)资助
放在了图形渲染上,而其他方面,仅仅作为第三方的开源库进行了一些融合或借鉴工作。但是,在模拟我们现实环境时,往往无法达到那么逼真的效果,因此,我们引入了ODE物理引擎,它将牛顿定律的内容通过C++语言进行表达,并在内部实现了非常精确的模拟框架。
1 虚拟现实领域的OSG虚拟引擎
在虚拟现实的构建过程中,图形引擎的选择是至关重要的。OSG图形引擎是一个基于工业标准OpenGL的软件接口,从开发人员的应用来看,相对于工业标准OpenGL及其他图形库,OSG图形引擎有着明显的优点:它不仅有着开源和平台无关性,同时,它封装并提供了许多提升程序运行性能的算法,在对封装的基础之上,建立了一个面向对象的框架,使得开发者可以摆脱底层的复杂建模,更便于应用程序的开发和管理,也就是说,对于
作者简介:杨俊杰(1982-),男,黑龙江伊春人,地图学与地理信息系统专业在读硕士研究生,研究方向为虚拟3维环境。
通讯作者:臧淑英(1963-),女,黑龙江哈尔滨人,教授,博士生导师,主要研究方向为土地利用/覆被变化、景观生态学及地理信息
第1期杨俊杰等:虚拟现实中的物理引擎ODE与虚拟引擎OSG结合探讨
何信息。
67
开发人员来说,可以更轻松地使用OSG来实现虚拟场景的管理。
1.1OSG体系结构
OSG核心库提供了应用程序和NODEkits所需的功能模块,而OSG核心库和NODEkits一同组成了OSG的API。OSG核心库中的osgDB通过对OSG插件的管理,为用户提供了2D和3D文件的输入和输出接口。
同时,OSG还提供了互操作库,它使得OSG易于与其他开发环境进行结合,例如脚本语言Python和Lua。另外,OSG还提供了许多例子和程序,而这些程序和示例伴随着OSG的成长也在不断地扩展。
场景图形通常包括了多种类型的节点以执行各种各样的用户功能,例如,开关节点(Switch)可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点(Tranform)可以改变子节点几何体的坐标变换状态。面向对象的场景图形使用继承机制来提供这种多样性,所有的节点类都有一个共有的基类,同时各自派生出实现特定功能的方法。
1.2OSG中内存管理概念
图2 场景图形抽象表达
Fig.2 Abstractexpressionofscenegraph
图形场景往往需要开发人员在开发应用程序时管理
数以万计的节点数据以及其他的事件、回调等内容,由此,必然会发生以下两种情况: 程序运行过程中,由于没有对无效节点进行销毁,造成系统过于臃肿而运行缓慢; 程序退出时,由于管理过多的数据,以及相应事件、相机、漫游器等内容,造成开发人员没有完全销毁相应的内容在内存中的占用,针对上述情况经常造成内存泄露及其他一些不可预估的系统崩溃问题,OSG提出了内存管理策略,用以维护程序运行,这就是内存引用计数策略,这种策略可以通过自动清理不再引用的内存以避免内存泄露。下面举例说明如何使用模板类管理内存:
osg::ref_ptr<osg::Geode>groundGeODE=newosg::Geode;osg::ref_ptr<osg::Geode>sphereGeODE=newosg::Geode;
osg::ref_ptr<osg::PositionAttitudeTransform>spherePAT=newosg::PositionAttitudeTransform;
osg::ref_ptr<osg::PositionAttitudeTransform>tankPat=newosg::PositionAttitudeTransform;
由于篇幅原因不能列举所有继承自Referenced类的所有OSG对象,但所有场景图形节点均是继承自这个基类的,比如ndoe、Geode、group、osgParticle等(如图1所示)
。
组节点与叶节点的定义是根据树状数据结构的数据
组织方式来解释的。而组节点与叶节点在OSG中是没有明显的节点来表示的。但是有些比较有代表类型的数据结构,根据个人使用习惯会有所具体表示。比如上述的开关节点、细节层次节点、变换节点一般都可以用来作为组节点使用。
OSG定义了大量的节点类型以及强大的空间结构组织能力,OSG场景图形实质上就是一种中间件,它构建于OPENGL底层函数之上,简化空间数据组织和管理,提高性能。图3即为3D程序层次结构抽象出来的3维系统与底层API的构建关系。
图3 3D程序层次结构
图1
OSG::NODE继承关系图
Fig.3 Thehierarchyfor3Dapplication
Fig.1 TheinheritanceofOSG::NODE
1.3OSG场景图形
也就是说有很多3D应用程序并不是直接通过底层
API构建的,而是可以通过高度封装了的OSG或其他图形引擎中提供的功能搭建起来的。
OSG场景图形采用一种自顶向下,分层的树状数据结构来组织空间数据集,以提升渲染的效率(如图2所示)。
场景图形树状结构的顶部是一个根节点,OSG中用osg::ref_ptr<OSG::Group>root来定义根节点。从根节点向下延伸,还可以包含很多组节点。各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。根节点和各个组节点都可以拥有多个子成员。在场景图形
1.4OSG场景图形渲染方式
OSG渲染过程可以简单的分为3个阶段:用户更新(UPDATE)阶段、筛选(CULL)阶段、绘制(DRAW)阶段。
用户更新阶段负责更新数据、修改场景,即更新操作通过程序或场景图形节点的更新回调函数完成其状态、位置、颜色等行为或属性的改变。比如,我们通过键盘或其他外围设备实现与场景图形的事件交互,来更新某指();
选裁剪;绘制阶段负责将筛选结果送往渲染管线,进行显示处理。
2.2 基本对象
在ODE中,需要用其内部定义的对象标识来模拟现实中存在的物体,然后,对其进行控制和模仿来表达物理世界。ODE主要包含仿真世界(dWord)、碰撞空间(dSpace)、刚体(dBody)、几何体(dGeom)、节点(dJoint)、节点组(dJointGroup)以及函数处理返回对象(dWorldID、dBodyID)。下面对仿真世界、刚体、几何体和碰撞空间进行简单描述:
1)仿真世界是一个存储物体对象的容器(类似我们现实生活的这个空间,容纳着世间万物)。在每个简单的系统中,我们只需要建立一个世界对象,不同的世界对象之间不存在任何关联,不能互相影响。
2)刚体即是我们在系统中主要操作的对象。刚体拥有物理意义的基本属性,并且它的某些属性在当前物理世界中的时间轴上是变化的。比如:重心、线性速度、角速度、方向、质量、质心位置、质量分布矩阵。
3)几何体(dGeom)是碰撞系统中的基本对象。几何体可以是独立的刚体,几何体分为可置位和不可置位的。可置位的几何体表现为一个刚体,它可以在更新变化时被改变。而不可置位的几何体则用来表达环境中静止不动的物体。在模拟碰撞检测过程中,几何体(可置位)与刚体结合到一起。因为几何体只具有几何属性,却没有刚体所独有的动态属性,两者联系到一起,才能得到仿真过程中所需的全部属性。
4)碰撞空间(dSpace)主要是用来简化和加快碰撞检测的一个对象,我们将几何体插入到碰撞空间中,由碰撞空间执行判断、筛选,然后再调用碰撞检测,得出检测结果。
1.5OSG渲染过程
OSG渲染过程从开始初始化,到最后程序退出的工作流程(基于wxWidgets且类似于MFC的一个开源框
架),如图4
所示。
图4 渲染过程
Fig.4 Rendingprocess
1.6 运行截图
运行截图如图5
所示。
3ODE与OSG结合模拟流程
流程如图6所示。
图5 OSG渲染运行截图
Fig.5 ScreenshotofOSGapplication
2 物理模拟领域的ODE物理引擎
ODE是一个免费的具有工业品质的用于模拟关节连
接的刚体动力学的库。举例来说,模拟地面上的车辆,有腿的动物,虚拟环境中的可移动物体,它不仅是快速、灵活和强健的,而且有内建的碰撞检测系统。
2.1 基本数据类型
ODE库含有两种基本数据类型:单精度(single)和双精度(double)。单精度数据类型简洁,且占有很少的内存,但是如果用于精确计算则会产生较大的误差甚至出现错误,因此可以用单精度数据类型组建一个精度和稳定性要求不高的系统。而对于精度和稳定性要求高,误差要求小的系统来说双精度是理想的数据类型选择。还有些封装比较高级的数据类型比如:dVector3,dVector4,d
d图6 ODE与OSG结合运行流程图
Fig.6 Theapplicationflowchartofcombination
ofODEandOSG
4结束语
开发系统时结合ODE与OSG两个开源项目,主要
)
像图中符号的设计。笔者主要从颜色方面进行阐述影像图中符号设计的一些问题和现有的解决方法:
3.3.1 注记颜色
选取合适的颜色可以增强影像图的表现力;反之,效果会适得其反。比如对于建筑物的注记,一般采用红色、黄色注记,而不采用线划图中的黑色注记,因为影像图的总体色调基本是偏暗的,如果仍然采用黑色注记,可能会使得注记与目标难以区分,如图3所示。
3.3.2 线划颜色
影像图中,道路经常要被叠加上矢量信息,所以线划颜色的设计显得尤为重要。对于不同比例尺的影像图,不同等级道路表示不同。比如在河南省影像图的制作过程中,就对县道、省道进行不同线划颜色设计,如图4所示。
图4 影像图与简单的地图符号进行叠加
Fig.4 Stackingimageandsimplemapsymbols
3.3.3 普染颜色
影像图中对面状要素进行普染,可以突出重要的面状地物信息。在影像图中,主要是对水系、政区和无图像区进行普染。在今后的工作中,可以对其他面状要素的普染要求进行细化研究。
总之,对于影像图的符号设计方面,还有很多工作要做。对于制图者而言,需要不断地积累色彩使用经验,了解色彩功能和在不同色调影像环境中的作用,从而进行
科学地设计。
4 结束语
长期以来,很多地图工作者热衷于对计算机技术和新兴技术的追求,而对本学科的理论研究重视不够。面对日新月异的科学技术,地图工作者不能只掌握新技术,还必须具有地图学本身的理论知识和方法,并不断学习研究新的理论和方法,以科学的理论指导地图的制作和生产。对于遥感技术,仅仅掌握其本身的理论和技术只会让制图工作者显得更加盲从,还应该把它与地图学的有关理论联系起来,找到两者的结合点,研究相关的制图特点和规律,从而来指导新形势下的 影像制图 。
参考文献:
[1] 王珏,陈映鹰.数字正射影像地图的生成及进一步开发
利用[J].遥感信息,2001,(2):31-34.[2] 王长森.地图制图综合概述[J].地图,1999,(4):51
-55.
图3 不同颜色标记对影像图的影响
Fig.3 Theinfluenceofannotationwithdifferent
coloronimage
map
[3] 方碧云.利用卫星影像实现GIS电子地图的制作和快速
更新[J].城市勘测,2008,(5):93-96.
[编辑:宋丽茹]
(上接第68页)
目的是为了充分发挥两个开源项目不同的长处,如OSG在渲染方面的高效、逼真以及动态管理的快捷、方便和ODE在碰撞检测和物理模拟中的精确性(如图7所示,其中左图白点处为炮弹降落位置,右图在降落位置发生爆炸)
。
参考文献:
[1] 有人,陈定方.虚拟现实环境中的物理模拟以及物理引
擎应用的研究[J].湖北工业大学学报,2008,23(2):7-9.
[2] 徐凌.基于opensceneGraph引擎的漫游系统的研究与实
现[D].武汉:武汉理工大学,2008.[3] 龙仁强.ODEv0.5用户指南./Show
Long/archive/2006/09/28/1301809.aspx.[4] 欧阳慧琴,陈福民.物理引擎与图形渲染引擎绑定的研究与实现(J)计算机工程与设计,2008,29(21):5580
图7 ODE与OSG结合运行截图
Fig.7 Thescreenshotbasedonthecombination
-5582.
[编辑:宋丽茹]
正在阅读:
虚拟现实中的物理引擎ODE与虚拟引擎OSG结合探讨08-09
废水处理化学方法09-30
ISO14000管理体系认证流程05-23
关于职业学校英语翻转课堂策略的研究11-01
2016年河北省主治医师(内科)职业试题02-29
全自动洗衣机的plc控制(毕业设计)03-23
2015-2016学年浙江省嘉兴市第一中学高二下学期期末考试历史试题06-18
真诚与正义的名句02-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 引擎
- 虚拟现实
- 探讨
- 物理
- 结合
- 虚拟
- ODE
- OSG
- 红楼梦论文
- 2010年中考数学真题分类汇编(150套)专题三十_锐角三角函数
- 沥青混合料空隙率与矿料级配曲线关系
- 山西省中小学体育、音乐、美术教师教学基本功 技能比赛方案
- 微作文写作
- 便利店商品陈列规律
- 五年级数学下册应用题---体积表面积综合练习
- 《全站仪应用》实验指导书
- 企业工资专项集体合同(范本)
- 吉林省实施《中华人民共和国道路交通安全法》办法
- 三年级英语上册Unit 3 检测卷
- 2017年北林翻译硕士考研复试辅导班选择经验分享
- 让青春在奉献中飞扬---记全国“奉献之星”优秀志愿者黄清火
- 螺纹连接习题课
- 第一章制图的基本知识
- 2015济南槐荫英语三模及答案
- 煤炭企业全面预算管理
- 如何打造你的个性婚纱秀
- 磁悬浮技术
- memorial day 阵亡将士纪念日