浅谈用director软件做虚拟仿真系统的优势

2024-06-16

浅谈用director软件做虚拟仿真系统的优势

浅谈用director软件做虚拟仿真系统的优势 篇1

浅谈用director软件做虚拟仿真系统的优势

对于三维场景的虚拟仿真,通常是建立在DirectX 3D 和OpenGL 等图形标准的基础上,通过DirectX 3D 和OpenGL 等A P I 函数库实现三维虚拟的交互操作L 然而,OpenGL 并不是一种语言,它更像C 语言运行时的一个函数库,提供了一些预包装的功能[1 ]L 因此,要想运用好OpenGL,就必须在非常熟悉它本身编程技巧的同时掌握C 语言等编程规范,这对非专业人员来说是一件非常困难的事.本文结合燃气轮机虚拟仿真系统的开发经验,针对其对模型交互性操作要求不高的情况,设计了一套系统开发方案,巧妙地避开了OpenGL,C 语言等程序编写。1 交互场景的实现 1.1 开发平台

开发方案所涉及的软件平台有3DS MAX,DirectorMX 及其外挂程序,在3DS MAX 中建立三维场景,并进行材质贴图渲染、机械仿真动画制作,利用Director MX 集成语言L ingo 及插件Shockwave 3D,3DP I 和Havok 实现三维场景的虚拟仿真,可进行平移、旋转、缩放、壳体透明和播放仿真动画等操作。3DS MAX 是一种优秀的三维动画造型软件,与仿真软件相比,它更强调造型的视觉效果,其渲染的效果更能给观察者以临场感,它也是目前第三方插件最多的3D 造型工具之一。

Director MX 是一套良好的界面开发工具,其内部集成的J avaScrip t,L ingo 语言具有良好的重复使用能力,而且其自带的“行为程序库”也能实现强大的交互功能L另外,Director MX 的外挂程序非常丰富,基本能完成C 语言所能实现的全部功能。因此,在界面编制方面,Director MX 已经成为C 语言的替代品,而且在实现相同功能的情况下,它的编程量远小于C 语言L在三维场景方面,Director MX 主要应用于网络三维游戏的开发[3 ],具有良好的三维开发基础,特别是外挂程序的引入更加完善了其三维制作能力L 作者别出心裁地将此种方法应用到机械结构的虚拟仿真,既实现了较高的三维互动性,又避免了复杂的程序编写。1.2 场景建立

在Director MX 中加入Shockwave 3D 引擎。Shockwave 3D 的应用范围很广,从简单的三维文字动画到交互式三维游戏环境,都可以通过它被表现出来LDirector 为Shockwave 3D 加入了几百条控制Lingo,结合Director 本身功能,在交互能力上Shockwave 3D 具有强大的优势。但Shockwave 3D引擎只能浏览三维模型,在场景建立方面必须要通过其他方式完成L Shockwave 3D 场景可以通过Lingo来创建,但要想创建燃气轮机这样复杂的场景就必须借助3DSMAX 等三维软件。

首先利用3DSMAX 完成燃气轮机各部件的三维造型,为其添加恰当的材质纹理,并制作相应的机械仿真动画,如图1 所示L然后将燃气轮机模型转成Shockwave 3D 格式文件,导入Director MX 中。在Director MX 中,Shockwave 3D 浏览器仅局限于模型的读入,对3D 模型的管理与编辑能力比较弱,既没有编辑窗口,又没有管理接口L所以,对于需要在Director MX 中制作3D 互动的用户来说,管理3D 模型时,必须借助于外挂程序——3DP IL由于篇幅的限制,本文不详细阐述外挂程序(Shockwave 3D,3DP I,Havok 等)的安装与设定。进入3DP I 之后,就会看到十分详细的功能设定与格式的3D 资源管理接口L在3DP I 这套外挂程序软件中,可以任意设定3D 对象的各种属性,并且可以调整光源的设定,纹理、阴影、运动、碰撞设定与摄影机的设定,功能非常强大,可以称之为Shockwave 3D的属性管理器(property in spector)。甚至可以用3DP I 来建立3D 对象、光源、摄像机以及动画。1.3 交互功能的实现

场景的交互性是整个虚拟仿真系统的灵魂,交互功能的强弱直接影响到虚拟仿真的最终效果。本文所研究的燃气轮机虚拟仿真系统需要实现的三维空间的交互操作基本囊括了一般PC 机上仿真的要求,它可以利用鼠标自由拖动模型,旋转模型,实现模型的缩放、透明,播放机械原理动画等L 要想实现这些功能,利用OpenGL 等语言编程的工作量是难以想象的。利用Lingo 也能很好地实现这些功能,但同样有较大的程序量LMacromedia 公司为三维模型的交互操作提供了一套功能强大的工具包——3DBehavio rs,通过使用它的三维模型行为库可以在脱离编程的情况下创建和控制三维环境。Director 包含了2 种不同类型的三维行为库:T rigger(触发器)和A ct ion(操作)L当虚拟仿真系统

使用者的某一动作(如单击鼠标左键)发生时,T rigger将向系统发出信号,从而引起指定的A ct ion的执行(如透明所选部件)。在Director 中,A ct ion 又分成3 种: LocalAct ion(本地动作)、Public Act ion(全局动作)和In2dependen t A ct ion(独立动作)L当一个本地动作赋给一个燃气轮机部件后,该动作只能被赋给同一部件的触发器所触发L与本地动作不同的是: 公共动作能被任何触发器触发,不管触发器是被赋给同一Sp rite 还是其他的SpriteL 公共动作使用和本地动作一样的触发器,而独立动作根本无需触发器触发即可执行L例如: 可以使用独立动作中的Automatic Model Ro tat ion,让场景中的某个模型自动旋转;利用Model Rollover Cursor,当鼠标指向某个模型时,指针将改变形状。2 碰撞检测的研究 几乎所有的三维模型的虚拟仿真都离不开碰撞检测——无论是各物体之间的碰撞检测,还是物体与场景之间的碰撞检测L 碰撞检测也称为干涉检测或者接触检测,就是对物体在运动或装配过程中可能出现的碰撞或干涉进行检查,避免碰撞或干涉的发生,或进行相应的碰撞处理L碰撞检测是构造虚拟环境的一个重要组成部分L在真实世界中,2 个机械

零件很显然不能相互穿透,所以在虚拟仿真系统制作时容易忽视碰撞检测这一过程的存在L然而,碰撞检测的过程是非常重要的,否则燃气轮机的转子就会在壳体内外自由穿插,零件之间也会相互穿身而过LDirectX 3D 和OpenGL 中碰撞检测是在编程时实现的,但本仿真系统是在Director MX 中完成的,并没有使用到D irectX 3D 或OpenGL 的开发平台,这种情况下的碰撞检测应该如何实现呢? 本文采用Director MX 的外挂程序——Havok,很好地解决了三维物体的碰撞检测问题。2.1 碰撞检测算法研究

碰撞检测的实现最重要的是研究选择碰撞检测算法的问题,碰撞检测实际上就是由电脑计算判断多面体相交的问题,场景中海量的姿态、位置各异的多面体使得上述计算是一项十分复杂和耗时的工作,在简单的仿真中,每一步都必须实现碰撞检测,从而系统的运行代价随着场景的复杂性而急剧增加L目前常用的算法有包围球法(sphere)、沿坐标轴 的包围盒AABB(ax is2aligned bounding boxes)、方向包围盒OBB(oriented bounding box)、二叉空间分割BSP(binary space portioning)树等L 本系统所用模型是基于三角形的,结合对上面几种算法原理的分析,给出了一种适合本系统开发的算法,这种算法是BSP 树的一种改版。

首先,根据物体的运动规律或用户的输入计算物体在即将渲染的一帧时的位置;然后,循环遍历场景中每一个三角形Z在循环过程中,找到当前三角形所在的平面S,沿平面法线方向对它作一个平移d,表示物体和平面之间所能接近的距离Z 判断物体在上一帧和当前帧的位置与平面S 的关系: 如果上一帧在平面前,而当前帧在平面后,说明物体穿过了平面S Z但因为平面是无边界的,还需进一步判断物体是否在三角形之内穿过平面S Z过三角形的三边,做垂直于三角形的平面S 1,S 2,S 3,并且令它们的法线指向三角形的内部Z 为了体现物体和三角形所能接近的最短距离,这3 个平面也需要作一个平移d,只不过是沿着其法线负方向Z 依靠这3 个平面就可以判断物体是否在三角形三边所界定的范围之内穿过平面S Z 但是,如果三角形有很尖利的锐角,就会使其界定的区域过大[5 ]Z 所以需要另外3 个与它们平行的平面S 4,S 5,S 6 来削去产生的锐角,如图3 所示Z 通过判断物体现在的位置是否在这6 个平面之内就可以判断物体与当前三角形是否发生碰撞,如果发生碰撞,修正当前帧的位置,使物体的运动沿着与平面S平行的方向,否则,继续计算下一个三角形。

总之,该算法的原理就是: 给出一个三角形,判断物体是否穿过了三角形所在的面,再判断物体是否在三角型内部穿过。2.2 碰撞检测的实现

碰撞检测的算法有很多,算法只是一种理论方法,最终的碰撞检测还需要通过程序来完成L针对本文开发环境,选用Director 的插件HavokL该插件主要用于控制三维模型,能够方便地对模型添加材质纹理、光照和阴影,擅长于模型的碰撞检测;其开发语言也可以为L ingo 语言L 下面以简单的实例说明利用Havok 插件开发三维场景的基本方法以及碰 撞检测的实现。

?? havok = member(“havok”)——初始化场景 ?? brickSh.ambient = rgb(200,0,0)——添加纹理

?? repeat w ith w = 1 to 12 pengzh s[w ] = [ ] pengzhk s-h [w ] = [ ] repeat w ith l = 1 to 6 pengzh s [w ] [ l ] = w rld.newModel(“ pengzh ” &w &“-”&l,pengzhR s)pengzh s[w ] [ l ].shaderL ist = pengzhSh if(w MOD 2)= 1 then ?? ——碰撞检测 3 成果展示

根据本文所阐述的系统开发方案,作者已成功地完成了军队科研项目“燃气轮机虚拟仿真训练教学系统”的开发。利用3DSMAX 软件建立燃气轮机模型,并添加逼真的材质,制作燃气轮机机械原理、结构的机械仿真模块;利用Director MX 编制了交互性能高、外形美观、使用方便的交互界面,Shock2w ave 3D,3DP I 和Havok 等外挂程序实现燃气轮机虚拟仿真L 作者结合计算机辅助教学与虚拟仿真技术,成功地开发出一套集图片文字、机械仿真动画、虚拟仿真等多维题材于一体的训练教学软件,可以实现鼠标拖动、旋转、缩放、壳体透明、播放原理动画等三维空间的交互式操作L虚拟拆装界面如图4 所示。小 结

本文结合燃气轮机虚拟仿真系统的开发经验,针对其对模型交互性操作要求不高的情况,设计了一套系统开发方案,巧妙地避开了OpenGL,C 语言等程序编写L 成功地运用Shockwave 3D,3DP I 和Havok 等外挂程序实现燃气轮机虚拟仿真系统,避免OpenGL,CG 等复杂程序的编写L 结合插件Havok研究了碰撞检测原理,根据实际虚拟仿真系 统精度要求演变了BSP 树分割法。由于计算机及其相关技术日新月异,本文的研究也存在不足: 由于虚拟仿真模块脱离了OpenGL编程,在降低制作难度的同时也降低了虚拟仿真操作的交互程度L 对此可利用L ingo 语言几乎可以调用其他所有语言程序的功能,结合OpenGL,CG 等专业函数库来弥补L 先利用OpenGL 编程,读取模型的空间和材质数据,实现在3D 空间的互动;再通过CG 语言对模型进行着色、光照等渲染,让模型具有完美的视觉效果;最后通过Director MX 的L ingo语言调用OpenGL,CG 程序,将高互动的虚拟仿真与其他模块整合。

【浅谈用director软件做虚拟仿真系统的优势】推荐阅读:

Director05-15

职场英语:Human director resume05-30

谈用宽容对待学生05-09

上一篇:敖东镇中心小学2011年工会工作计划下一篇:真切的近义词和反义词

本站热搜

    相关推荐