虚拟现实在超市及餐厅中的控制_第1页
虚拟现实在超市及餐厅中的控制_第2页
虚拟现实在超市及餐厅中的控制_第3页
虚拟现实在超市及餐厅中的控制_第4页
虚拟现实在超市及餐厅中的控制_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

虚拟现实在超市及餐厅中的操纵学校:河北工业大学系部:机械工程学院专业:机械工程年级:机研136学生姓名:赵占勇学号:20133120402指导教师:高春艳目录目录 I摘要 IV关键词 IVAbstract VKeywords V前言 VI第1章虚拟现实技术 11.1虚拟现实技术简介 11.1.1虚拟现实技术的概念 11.1.2虚拟现实技术的关键技术 11.2VRML概述 21.2.1VRML简介 21.2.2VRML应用和展望 2第2章其它技术支持——3dsmax与JavaScript 42.13dsmax概述 42.1.13dsmax简介 42.1.23dsmax的特点 42.1.33dsmax的应用领域 52.2JavaScript概述 52.2.1JavaScript简介 5第3章使用3dsmax技术构建模型 73.13dsmax构建模型的准则 73.23dsmax构建模型的差不多方法 73.2.1差不多体建模 73.2.2二维线形建模 73.2.3三维修改器建模 83.3利用3D制作动画 9第4章使用VRML技术构建动画与交互功能 104.1使用VRML构建动画与交互功能的差不多语法 104.1.1使用VRML构建动画的差不多插补器类型 104.1.2使用VRML构建交互功能的差不多传感器类型 104.2使用VRML构建动画 114.2.1使用VRML构建马桶盖的开启 114.2.2使用VRML构建压力锅的烟雾及开启 124.2.3使用VRML构建天空 134.3使用VRML构建交互功能 144.3.1使用VRML构建冰柜门开启的交互功能 144.3.2使用VRML构建超市收银的交互功能 154.3.3使用VRML构建超市点击收获物品的交互功能 164.3.4使用VRML构建超市大门伸缩开启的交互功能 174.3.5使用VRML构建油烟机声音的交互功能 184.4使用VRML构建视点、灯光 194.4.1使用VRML构建固定视点 194.4.2使用VRML构建跟随视点 20第5章使用JavaScript构建动态场景的交互 235.1使用JavaScript构建动态场景交互功能的实现 235.1.1利用JavaScript创建微波炉旋转加热动画 245.1.2利用JavaScript构建洗手池水龙头的的交互功能 265.1.3利用JavaScript构建燃气灶开关和火焰大小的交互功能 275.1.4利用JavaScript实现购物车收获物品和收银之间切换的交互功能 30结论 32总结与体会 33谢辞 34参考文献 35附录一翻译原文 36附录二翻译译文 42虚拟现实在超市及餐厅中的操纵摘要虚拟现实(VirtualReality,简称VR),是一种基于可计算信息的沉醉式交互环境,具体地讲,确实是采纳以计算机技术为核心的现代高科技生成逼确实视、听、触觉一体化的特定范围的虚拟环境,用户借助必要的设备以自然的方式与虚拟环境中的对象进行交互作用、相互阻碍,从而产生“沉醉”于等同真实环境的感受和体验。VR带来了人机交互的新概念、新内容、新方式和新方法,使得人机交互的内容更加丰富、形象,方式更加自然、和谐。虚拟现实近几年进展迅速,应用领域广,进展潜力大,涉及计算机图形学、数字图像处理技术、多媒体技术、网络技术、人工智能等等。它是利用计算机和虚拟现实硬件设备对真实世界的模拟,不仅能使人们在巡游虚拟环境的过程中产生身临其境的感受,同时还能够与虚拟场景进行交互,具备交互性、沉醉性、幻想性和多感知性等特征。本文要紧探讨利用3dsmax、VRML与JavaScript编程技术构造虚拟现实场景实现虚拟技术在超市及餐厅中的应用操纵,达到运用鼠标操纵场景内的物品,向其发出指令使之发生相应的运动变化。例如:餐厅部分中微波了的加热旋转、燃气灶的火焰燃烧、洗菜池的流水调控等等;超市部分中的点击收获物品、收银功能实现等。关键词:超市及餐厅操纵,VRML,3dsmax,JavaScript

VirtualRealityinsupermarketsandrestaurantsinthecontrolAbstractVirtualReality(VirtualReality,referredtoasVR),isbasedonquantifiableinformation,immersiveinteractiveenvironments,specificallytheuseofcomputertechnologyasthecoreofthemodernhigh-techgeneratingrealisticvision,hearing,touchthespecificintegrationrangeofvirtualenvironment,userswiththenecessaryequipmentinanaturalwaywiththevirtualenvironmentinteractionobject,interaction,resultingin"immersion"inthesamefeelandexperiencetherealenvironment.VRhasbroughtanewconceptofman-machineinteraction,newcontent,newwaysandnewmethodstomakehuman-computerinteractionismuchmorerich,vivid,morenaturalway,harmony.Inrecentyearstherapiddevelopmentofvirtualreality,wideapplicationareas,developmentpotential,relatedtocomputergraphics,digitalimageprocessingtechnology,multimediatechnology,networktechnology,artificialintelligenceandsoon.Itistheuseofcomputerhardwaredevicesandvirtualrealitysimulationoftherealworld,notonlyenablespeopletovisitthevirtualenvironment,immersivefeelinggeneratedintheprocess,andalsobeabletointeractwiththevirtualscene,withinteractivity,immersion,Fantasyandmoreawareofotherfeatures.Thispaperdiscussestheuseof3dsmax,VRMLandJavaScriptprogrammingconstructvirtualtechnologyvirtualrealitysceneinsupermarketsandrestaurantsintheapplicationcontrol,usethemousetocontrolobjectswithinthescene,toissueinstructionsandmakeacorrespondingchangeinthemovement.Forexample:Therestaurantpartoftherotationinthemicrowavetheheating,gasstove'sflameburning,vegetablespoolwaterregulation,etc.;supermarketsectionclickonharvestarticle,cashierfunctionrealization.Keywords:controlofsupermarketsandrestaurants,VRML,3dsmax,JavaScript前言跨入21世纪,人类差不多迈入数字化时代,我国信息产业得到迅猛进展。特不是网络技术、多媒体技术、可视化技术及虚拟现实系统的不断更新和进展,使虚拟现实系统进展成为数字化多维信息空间技术支撑平台,并成为构建数字虚拟环境的最重要的关键技术之一。虚拟现实语言作为计算机的核心技术已被广泛应用于社会生活的各个领域,例如产品设计与性能评价、教育与娱乐、高难度和危险环境下的训练、医学、房地产等诸多领域,但在模拟现实生活方面目前的成果还相对匮乏。本系统的要紧研究目地在于利用虚拟现实技术模拟出人们在现实生活几乎每天都能接触到的一些事物场景,使人们能够在一个完全虚拟的世界中体会到现实当中的日常生活,感受上人们在虚拟生活中多了一个“secondlife”。对今后虚拟现实技术在日常生活方面的应用起到引言预测的研究作用。虚拟场景是计算机通过数字通讯技术勾勒出的数字化场景。虚拟日常生活场景设计是将现实生活中经常接触到、使用到的日常生活场景虚拟化,使人们能够在虚拟的网络世界中感受到现实生活的踪影。实现现实生活中的超市和餐厅的差不多陈设、工作流程等,对其中的核心部件进行交互操纵,是用户能够轻松体验虚拟场景带来的真实生活。其中交互要紧包括:餐厅部分:冰柜门开启、微波炉加热旋转、洗菜池流水调控、抽油烟机音效、燃气灶火焰燃烧、压力锅加热雾化效果等;超市部分:伸缩门开启、点击收获物品、收银结账等等功能。基于VRML虚拟技术的超市及餐厅虚拟场景设计的实现改变了传统的真实场景模式,场景内能够通过鼠标操作,方便而快速地让用户感受到虚拟场景中各种部件的交互使用,制造一个真实的室内场景空间,若再加入一些外部设备,能够使用户产生沉醉感,仿佛自己确实在操控各种物体一样。第1章虚拟现实技术1.1虚拟现实技术简介1.1.1虚拟现实技术的概念虚拟现实是近年来出现的高新技术,也称人工环境。虚拟现实是利用电脑模拟产生一个三维空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟,让使用者如同身历其境一般,能够及时、没有限制地观看三度空间内的事物。VRML是一项综合集成技术[1],涉及计算机图形学、人机交互技术、传感技术、人工智能等领域,它用计算机生成逼确实三维视、听、嗅觉等感受,使人作为参与者通过适当装置,自然地对虚拟世界进行体验和交互作用。该技术集成了计算机图形(CG)技术、人工智能、传感技术、网络并行处理等技术的最新进展成果,是一种由计算机技术辅助生成的高技术模拟系统。概括地讲,虚拟现实是人们通过计算机对复杂数据进行可视化操作与交互的一种全新方式,与传统的人机界面以及流行的视窗操作相比,虚拟现实在技术思想上有了质的飞跃。虚拟现实中的“现实”是泛指在物理意义上或功能意义上存在于世界上的任何事物或环境,它能够是实际上可实现的,也能够是实际上难以实现的或全然无法实现的。而“虚拟”是指用计算机生成的意思。因此,虚拟现实是指用计算机生成的一种专门环境,人能够通过使用各种专门装置将自己“投射”到那个环境中,并操作、操纵环境,实现专门的目的,即人是这种环境的主宰[2]。1.1.2虚拟现实技术的关键技术实物虚化、虚物实化和高性能的计算处理技术是VRML技术的三个要紧方面。实物虚化是将现实世界的多维信息映射到计算机的数字空间生成相应的虚拟世界,为高性能的计算处理提供必要的信息数据。虚物实化通过各种计算和仿真技术使计算机生成的虚拟世界中的事物所产生的各种刺激以尽可能自然的方式反馈给用户。1.2VRML概述1.2.1VRML简介VRML是英文VirtuualRealityModelingLanguage——虚拟现实造型语言的缩写。其被广泛应用于Internet上创建充满动感的三维虚拟空间。它是一个可参与、可进入、可交互的三维立体世界,给人们带来沉醉感、想象力以及动态交互感知的效果,从而产生置身于真实环境中的幻想感、身临其境的感受。虚拟现实建模语言VRML涉及有关的差不多概念和名词是编写VRML的基础,差不多术语包括各种节点、域值、事件、路由、原型、场景及脚本等[3]。1.2.2VRML应用和展望虚拟现实建模语言VRML设计,源于虚拟现实技术,是20世纪末进展起来的设计众多学科的高新技术。它集计算机、仿真、微电子、传感与测量技术于一体的高新技术的融合。而虚拟现实建模语言VRML,正式利用虚拟现实技术,在计算机中创建一种虚拟环境,通过视觉、听觉、触觉、味觉、嗅觉以及生理反应等感知器,使用户产生一种与现实生活相同的感受,有身临其境的感受甚至生理感受。可实现用户与虚拟现实环境直接惊醒交互。虚拟现实建模语言(VRML)涉及计算机网络、多媒体及人工智能三大领域,以及自然科学、社会科学和哲学等学科领域。具体来讲,虚拟现实环境一般涉及计算机图形学、图像处理、模式识不、传感器、语音处理、网络技术、并行处理、人工智能等高新技术,还涉及天文、地理、数学、物理、化学、美学、医学、军事、生理和心理等领域[4]。计算机硬件技术、网络技术及多媒体技术的融合与高速进展使得虚拟显示技术获得长足的进展,是虚拟现实技术能在Internet上得以实现和进展。目前网站使用的均为二维图像与动画网页,而在网站上采纳虚拟现实建模语言(VRML),则能够设计出虚拟现实三维立体网页场景和立体景物。利用虚拟显示技术能够制造一个逼确实“虚拟人”,为医学实习、治疗、手术及科研做出贡献,也可应用于军事领域而设计一个“模拟战场”来进行大规模的高科技军事演习,既能够节约大量费用,又使部队得到了锻炼。在航空航天发射中,也能够制造一个“模拟航天器”,模拟整个航天器生产、发射、运行和回收的全过程。此外,还能够应用于工业、农业、商业、数学、娱乐和科研等方面,其应用前景特不宽敞。总之,VRML是21世纪融计算机网络、多媒体及人工智能为一体的最为优秀的开发工具和手段。第2章其它技术支持——3dsmax与JavaScript2.13dsmax概述2.1.13dsmax简介3DStudioMax,常简称为3dsMax或MAX,是Autodesk公司开发的基于PC系统的三维动画渲染和制作软件。其前身是基于DOS操作系统的3DStudio系列软件,最新版本是2010。在WindowsNT出现往常,工业级的CG制作被SGI图形工作站所垄断。3DStudioMax+WindowsNT组合的出现一下子降低了CG制作的门槛,首选开始运用在电脑游戏中的动画制作,后更进一步开始参与影视片的特效制作,例如X战警II,最后的武士等。在应用范围方面,广泛应用于广告、影视、工业设计、建筑设计、多媒体制作、游戏、辅助教学以及工程可视化等领域。拥有强大功能的3DSMAX被广泛地应用于电视及娱乐业中,比如片头动画和视频游戏的制作,深深扎根于玩家心中的劳拉角色形象确实是3DSMAX的杰作。在影视特效方面也有一定的应用。而在国内进展的相对比较成熟的建筑效果图和建筑动画制作中,3DSMAX的使用率更是占据了绝对的优势。依照不同行业的应用特点对3DSMAX的掌握程度也有不同的要求,建筑方面的应用相对来讲要局限性大一些,它只要求单帧的渲染效果和环境效果,只涉及到比较简单的动画;片头动画和视频游戏应用中动画占的比例专门大,特不是视频游戏对角色动画的要求要高一些;影视特效方面的应用则把3DSMAX的功能发挥到了极至。2.1.23dsmax的特点1、功能强大,扩展性好。建模功能强大,在角色动画方面具备专门强的优势,另外丰富的插件也是其一大亮点。2、操作简单,容易上手。与强大的功能相比,3dsmax能够讲是最容易上手的3D软件。3、和其它相关软件配合流畅。4、做出来的效果特不的逼真。2.1.33dsmax的应用领域1、游戏动画要紧客户有EA、Epic、SEGA等,大量应用于游戏的场景、角色建模和游戏动画制作。2、建筑动画北京申奥宣传片等。3、室内设计在3dsmax等软件中,能够制作出3D模型,可用于室内设计、例如沙发模型、客厅模型、餐厅模型、卧房模型等等。4、影视动画《阿凡达》《诸神之战》等好莱坞电影都引进了先进的3D技术。2.2JavaScript概述2.2.1JavaScript简介JavaScript是NetScape公司为Navigator扫瞄器开发的,是写在HTML文件中的一种脚本语言,能实现网页内容的交互显示[5]。当用户在客户端显示该网页时,扫瞄器就会执行JavaScript程序,用户通过交互式的操作来变换网页的内容,以实现HTML语言所不能实现的效果。JavaScript是一种描述性的脚本语言,将JavaScript写入到Web页面当中,能让你的网页更加生动爽朗,也是目前网页中设计中最容易学又最方便的语言。你能够利用JavaScript轻易的做出亲切的欢迎讯息、漂亮的数字钟、有广告效果的跑马灯及简易的选举,还能够显示扫瞄器停留的时刻。让这些专门效果提高网页的可观性[6]。在VRML中,Script节点包含一个脚本程序。那个程序是用JavaScript或Java写的,Script节点脚本能够接收事件,处理事件中的信息,还能够产生基于处理结果的输出事件。Script节点不创建任何造型,因此它在虚拟世界中也是看不到的。Script节点能够作为子节点包含在任何组节点中,但它不依靠于所使用的系统,而且与子节点所作的选择无关。Script节点一般放在VRML文件的最外层组。利用程序脚本和Script节点,能够差生复杂动作。通常程序脚本动作包括已计算好的动画运动路径的输出。Script节点能够看作是一个节点的外壳:它拥有field域、eventIn事件、eventOut事件,然而能够通过程序脚本来给予脚本节点的动作。能够如此理解Script节点:通过同意eventIn事件调用了相应的处理过程函数,通过程函数处理后得出的数据作为eventOut出事件发送出去,其中eventIn事件的值能够作为过程函数的因变量的值,假如需要则用field域定义某个中间变量。不管Script节点是直接包含程序脚本,依旧将其放在分立的文件中,Script节点的程序脚本定义了此节点的动作。这些动作能够包含由接口eventIn接收的输入的响应,计算新的结果,将这些结果存入节点的接口域,通过节点的接口eventOut发出新值。JavaScript继承了Java语言的面向对象、跨平台等多想特点,有人认为它是为了快速、简单地编程而出现的微型Java语言。鉴于JavaScript在网页设计中成功应用并成为主导编程语言,VRML也将JavaScript作为内嵌编程语言的候选者之一,大部分VRML扫瞄器都支持JavaScript编写的脚本程序。尽管JavaScript关于大多数应用来讲差不多足够,但VRML的倡导者之一SGI公司依旧基于语言开发了专门针对VRML设计的Vrmlscript语言。Vrmlscript能够讲是JavaScript的一个子集,它使用了JavaScript的差不多语法,增加了一些适用于VRML的JavaScript对象。假如Script节点内直接包含使用这两种语言之一编写的程序脚本,为了使扫瞄器能够区分开,必须在url域的字符串开头注明“VrmlScript:”依旧“JavaScript:”。JavaScript对VRML场景的访问并不是一定要通过Script节点,假如VRML场景与HTML页面的其它对象相结合,比如使用了JavaScript对象,就能够使用直接访问的方式[7]。第3章使用3dsmax技术构建模型3.13dsmax构建模型的准则一个虚拟现实场景在计算机上演示流畅与否,与场景中的模型个数、模型面数、模型贴图这三个方面的数据量息息相关,只有在前期建模时处理好这三个方面的数据量,才可不能导致后期演示时出现卡、顿等现象。3.23dsmax构建模型的差不多方法3.2.1差不多体建模3dsmax中提供了特不容易使用的【标准差不多体】及【标准几何体】建模工具,只需拖动鼠标,即可创建一个几何体。这些差不多体靠参数来改变形态的,用这些差不多体能够制作一些简单的造型。·沙发建模、房屋建模图3-1沙发的效果图图3-2房屋的效果图3.2.2二维线形建模二维线形在建模中起着特不重要的作用,通常我们建立的三维模型大差不多上先创建二维线形,然后添加相应的修改命令来完成的。二维线形也能够直接在建模中使用,它提供了【顶点】、【线段】、【样条线】等修改级不,用二维线形绘制复杂的造型,必须给它添加适当的编辑修改命令,通过这些命令使二维线形生成三维物体,一步步绘制出复杂的结构造型。常见的修改命令如【挤出】、【车削】、【倒角】、【倒角剖面】、【放样】等。·洗手池建模、油烟机建模图3-3洗菜池的效果图图3-4油烟机的效果图3.2.3三维修改器建模在3dsmax的修改工具中有大量的三维修改命令,通过使用这些三维修改命令能够对三维对象进行一些复杂的变形和编辑,能够快捷地创建一些精度要求专门高的复杂三维造型。常见的修改命令如【FFD】等。·购物车建模、压力锅建模图3-7购物车的效果图图3-8压力锅的效果图·收款机建模图3-9收款机的效果图3.3利用3D制作动画在3dsmax中能够制作场景动画,导入进VRML里做必要的处理能够形成物体交互的动画,方便快捷的模拟出现实生活的场景。创建动画的方法:(1)单击“自动创建关键点”按钮,开启动画功能。(2)激活所需视图上需要变化的物体,改变其相对位置,确定好方位后点击打点按钮,定下关键帧。依此类推。(3)激活透视图,观看最终动画并加以修改。(4)如图3-10、3-11、3-12所示收银场景应用动画的最终效果。图3-10收银场景动画应用的原始图图3-11收银场景动画应用的过程图图3-12收银场景动画应用的最终效果图第4章使用VRML技术构建动画与交互功能4.1使用VRML构建动画与交互功能的差不多语法4.1.1使用VRML构建动画的差不多插补器类型Timesensor节点的作用像一个时钟,它能够被用来执行开始、停止或者其他操纵动画的动作。随着时刻的流逝,那个传感器就会产生事件来表示时刻的变化。通过将这些事件从Timesensor节点的eventOut路由到其他节点,当Timesensor节点的时钟计时时,能够使这些节点发生相应的变化[8]。若要使一个坐标系平移、旋转和按比例缩放的话,能够将Timesensor节点时刻路由至PositionInterpolator和OrientationInerpolator节点。这些节点中每一个产生新的位置和旋转值,并通过他们的eventOut事件传送这些值。按顺序将这些值路由到Transform节点,就能够使节点的坐标系随动画过程的进展而发生平移、旋转和按比例缩放。依照其所插值的类型而将插补器节点分为几种[9]:PositionInterpolator位置插补器(用于造型位置的变化,和时刻传感器结合一起能够随时刻改变对象的位置,从而创建对象移动的效果。同时,那个节点还能够用来操纵对象的缩放,实现对象大小和形状的变化)。OrientationInterpolator方向插补器(用于对象的朝向变化,也确实是随着时刻的变化,对象绕某个轴,逐渐旋转不同的角度,体现出对象的方位的动态变化。)ColorInterpolator颜色插补器(描述颜色随时刻的变化,从而使得造型的颜色呈现一种灵活、生动的变化效果)。ScalarInterpolator标量插补器(对某些标量数值的域进行插补的,一般用于只有单一的数值表示的域,比如改变强度,能够调节光照,雾的浓度。材质的透明度等等)。NormalInterpolator法向插补器(能够随时刻改变vector的三维向量域值)。CoordinateInterpolator坐标插补器(对空间坐标的数值进行插补,然而同位置插补器的情况不同,坐标插补器往往不是用在对造型对象的位置坐标上,而是用在构成某类对象的空间坐标上。)4.1.2使用VRML构建交互功能的差不多传感器类型在虚拟场景中设置了一些具有检测、感知作用的节点,借助这些节点的使用,扫瞄者和虚拟对象能够实现更进一步的交互[10]。Touchsensor是一种用来检测观看者的接触和将事件输出的传感器。这些输出描述了在何时、何地观看者接触到了可感知的造型。CylinderSensor,PlaneSensor和SphereSensor节点也可用来检测何时观看者接触到一个可感知的造型[11],同时提供了用来改变造型位置和方向的输出。检测器能够分为两大类,一类是接触型的传感器,另一类是感知性的检测器。检测动作的检测器是接触型检测器[12],节点有:TouchSensor接触传感器(用于感知用户鼠标触发的动作)、PlaneSensor平面传感器(感知用户在XOY平面上鼠标拖拽动作)、SphereSensor球面传感器(用于感知用户绕中心点拖拽旋转的动作)及CylinderSensor圆柱传感器(用于感知用户绕中心轴拖拽旋转的动作)。检测用户和对象接近程度的检测器是感知检测器,节点有:VisibilitySensor可见性传感器(从扫瞄者所在的方位,感知一个空间长方体区域,在当前场景中是否能够被看见,据此输出事件触发动画效果),ProximitySensor邻近传感器(用于从扫瞄者视点所在的方位,感知用户进入、退出设定的空间长方体区域的动作),Collision碰撞感知节点(用于从扫瞄者所在的方位,感知用户与该组中任何子节点造型发生碰撞动作)。4.2使用VRML构建动画4.2.1使用VRML构建马桶盖的开启在现实生活中,人们能够通过点击按钮来冲洗马桶,为此,在本次设计中通过使用OrientationInterpolator来实现这一功能,并配有冲洗马桶的声音。如图4-1、4-2所示功能实现。以下所示为实现马桶盖关闭的代码:DEFgaiziTransform{}DEF clock1TimeSensor{cycleInterval1loopFALSE} DEF a1OrientationInterpolator{key [0.00.1……0.91]keyValue[0113.14……0-103.14]}DEFsTouchSensor{}Sound {sourceDEFzbAudioClip{url "matong.mp3"}} ROUTE s.touchTime TOzb.startTimeROUTEclock1.fraction_changedTOa1.set_fractionROUTEa1.value_changedTOgaizi.set_rotation图4-1马桶盖关闭动画的原始图图4-2马桶盖关闭动画的最终效果图在那个程序中,第一条路由的作用是把接触传感器s的touchTime事件域传递域值给声音AudioClipzb的startTime域,开启声音;第二条路由的作用是时刻传感器clock1的fraction_changed事件域传递域值给方位插补器OrientationInterpolatora1的set_fraction域;最后一条路由是方位插补器OrientationInterpolatora1的value_changed事件域传递域值给Transform节点gaizi的set_rotation域,完成动马桶盖关闭动画的全过程。4.2.2使用VRML构建压力锅的烟雾及开启在显示生活中压力锅工作中会有烟雾产生,通过VRML和cosmoworlds创建烟雾动画和锅的开启,还原真实场景。如图4-3、4-4所示功能实现。以下所示为实现烟雾动画代码:DEF_12TimeSensor{}DEFsteam-AniTrigger_13Script{eventInSFTime triggerIneventOutSFTime startTimeeventOutSFBool firstTimeurl "javascript:functiontriggerIn(value,time){startTime=value;firstTime=FALSE;}}ROUTEsteam-AniTrigger_13.firstTimeTO_12.set_enabledROUTE_12.timeTOsteam-AniTrigger_13.triggerIn图4-3压力锅烟雾动画的原始图图4-4压力锅烟雾动画的最终效果图程序中第一条路由的作用是脚本steam-AniTrigger_13的firstTime事件域传递域值给时刻传感器_12的set_enabled域;第二条路由作用是时刻传感器_12的time事件域传递域值给steam-AniTrigger_13的triggerIn域,实现烟雾动画。4.2.3使用VRML构建天空在虚拟现实中搭建外环境,模仿真实天空,增加场景的真实感。如图4-5所示为天空效果图。以下所示为实现真实感天空的代码:DEFSkyInterpScalarInterpolator{key [0,1]keyValue [0,1]}textureTransform DEF_34TextureTransform{}DEFSkyTimerTimeSensor{}DEFSkyMoveScript{eventInSFFloat floatINeventOutSFVec2f coordsOUTurl "javascript:functionfloatIN(value,timestamp){coordsOUT[0]=value;}}]ROUTESkyMove.coordsOUTTO_34.set_translationROUTESkyTimer.fraction_changedTOSkyInterp.set_fractionROUTESkyInterp.value_changedTOSkyMove.floatIN}图4-5真实感天空实现的效果图程序中第一条路由的作用是脚本SkyMove的coordsOUT事件域传递域值给_34的set_translation域;第二条路由作用是时刻传感器SkyTimer的fraction_changed事件域传递域值给标量插补器SkyInterp的set_fraction域;第三条路由是标量插补器SkyInterp的value_changed事件域传递域值给脚本SkyMove的floatIN域,实现云飘动的动画。4.3使用VRML构建交互功能4.3.1使用VRML构建冰柜门开启的交互功能“虚拟现实在超市及餐厅中的应用”为用户提供了场景中物体的一些差不多的交互功能,用户能够通过操作鼠标对场景中的物体进行实时交互操纵。当程序接收到事件响应后,通过一系列传感器操纵物体发生运动。如图4-6、4-7所示为冰柜门开启效果图。以下所示为实现冰柜门开启的交互功能的代码:DEFmen1Transform{}DEFs1_sensorPlaneSensor{maxPosition 300}ROUTEs1_sensor.translation_changedTOmen1.set_translation图4-6冰柜门开启的交互功能的原始图图4-7冰柜门开启的交互功能的最终效果图在该程序中路由的作用是平面传感器s1_sensor的translation_changed事件域传递域值给men1的set_translation域,完成鼠标操纵冰柜门开启的动画。4.3.2使用VRML构建超市收银的交互功能利用VRML里的多种传感器还原现实生活中中超市购物收银场景,同时配有声音,使人们真正感受到虚拟生活带来的沉醉感、真实感。如图4-8、4-9所示为超市收银功能的实现。以下为实现超市收银功能的代码:DEFArch_44FACES01Transform{children[DEFwu2TouchSensor{}DEFV2Grp01-TIMERTimeSensor{loopFALSEcycleInterval1.667},DEFArch_44PositionInterpolator{key[0,0.06……0.96,1,]keyValue[000,0.52831.394-0.9639,……-0.659416.37-8.592,]},Sound {sourceDEFmtgAudioClip{url "chaoshi1.mp3"}]ROUTEwu2.touchTime TOV2Grp01-TIMER.startTimeROUTEwu2.touchTimeTOmtg.startTimeROUTEV2Grp01-TIMER.fraction_changedTOArch_44.set_fractionROUTEArch_44.value_changedTOArch_44FACES01.set_translation图4-8超市收银功能实现的原始图图4-9超市收银功能实现的最终效果图程序中第一条路由的作用是接触传感器wu2的touchTime事件域传递域值给时刻传感器V2Grp01-TIMER的startTime域;第二条路由是接触传感器wu2的touchTime事件域传递域值给AudioClipmtg的startTime域;第三条路由作用是时刻传感器V2Grp01-TIMER的fraction_changed事件域传递域值给位置插补器Arch_44的set_fraction域;第四条路由是位置插补器Arch_44的value_changed事件域传递域值给Transform节点Arch_44FACES01的set_translation域,完成收银功能的动画。4.3.3使用VRML构建超市点击收获物品的交互功能利用VRML里的多种传感器还原现实生活中中超市购物,点击相应物品物品自动飞入购物车中,实现方法原理与收款相似。如图4-10、4-11所示为超市点击受收获物品功能的实现。以下为实现超市收获物品功能的代码:DEFyi4Transform{children [DEFn4TriggerTouchSensor{}DEFn41KfaAnimation{timeSensor DEFTime_22TimeSensor{}fieldInterps [DEFn4TranslationInterpKfaPositionInterpolator{key [0,0.02,……1]keyTypes [2,2]authorKey [0,1]keyValue [000,……-15-3510]authorKeyValue [000,……-15-3510]}]}]}ROUTEn4Trigger.touchTimeTOTime_22.set_startTimeROUTETime_22.fraction_changedTOn4TranslationInterp.set_fractionROUTEn4TranslationInterp.value_changedTOyi4.set_translation图4-10点击收获物品功能实现的原始图图4-11点击收获物品功能实现的最终效果图本程序中第一条路由的作用是接触传感器n4Trigger的touchTime事件域传递域值给时刻传感器Time_22的set_startTime域;第二条路由是时刻传感器Time_22的fraction_changed事件域传递域值给位置插补器n4TranslationInterp的set_fraction域;第三条路由作用是位置插补器n4TranslationInterp的value_changed事件域传递域值给Transform节点yi4的set_translation域,完成点击收获物品交互动画。4.3.4使用VRML构建超市大门伸缩开启的交互功能利用VRML里的多种传感器还原现实生活中中超市购物,点击大门,大门自动伸缩开启,实现方法原理与收款相似。如图4-12、4-13所示为超市大门伸缩开启功能的实现。以下为实现超市大门伸缩开启功能的代码:DEFUnnamedAnimation0Trigger_1TouchSensor{}DEFTime_8TimeSensor{startTime -1cycleInterval 5}actors USEV2Grp01fieldInterps [DEFV2Grp01TranslationInterp_9KfaPositionInterpolator{key [0,0.02,0.04,0.06,……0.96,0.98,1]keyTypes [2,2]authorKey [0,1]keyValue [0-0.4325090.00349385,……1.000045.30630.0048702]authorKeyValue [0-0.4325090.00349385,……1.000045.30630.0048702]}}]}ROUTEUnnamedAnimation0Trigger_1.touchTimeTOTime_8.set_startTimeROUTETime_8.fraction_changedTOV2Grp01TranslationInterp_9.set_fractionROUTEV2Grp01TranslationInterp_9.value_changedTOV2Grp01.set_translation图4-12超市大门伸缩开启功能实现的原始图图4-13超市大门伸缩开启功能实现的最终效果图程序中第一条路由的作用是接触传感器UnnamedAnimation0Trigger_1的touchTime事件域传递域值给时刻传感器Time_8的set_startTime域;第二条路由作用是时刻传感器Time_8的fraction_changed事件域传递域值给位置插补器V2Grp01TranslationInterp_9的set_fraction事件域;第三条路由作用是位置插补器V2Grp01TranslationInterp_9的value_changed事件域传递域值给Transform节点V2Grp01的set_translation域,完成超市大门伸缩开启动画。4.3.5使用VRML构建油烟机声音的交互功能利用VRML里的touchsensor实现现实生活中中抽烟烟机的工作,同时配有声音的开启和关闭,使人们能够交互操纵虚拟的场景。如图4-14所示为抽油烟机工作功能的实现。以下为实现抽油烟机工作功能的代码:DEFanniutouch01TouchSensor{}DEFanniutouch02TouchSensor{}DEF shengyinSound{sourceDEFyouyan AudioClip{loop FALSE}}ROUTEanniutouch01.touchTimeTOyouyan.startTimeROUTEanniutouch02.touchTimeTOyouyan.stopTime图4-14抽油烟机工作功能实现的效果图在该程序中第一条路由的作用是接触传感器anniutouch01的touchTime事件域传递域值给AudioClipyouyan的startTime域,开启声音;第二条路由作用是接触传感器anniutouch02的touchTime事件域传递域值给AudioClipyouyan的stopTime域,关闭声音,完成声音交互。4.4使用VRML构建视点、灯光4.4.1使用VRML构建固定视点在一个完整的虚拟现实场景中应有各个角度方面的视角,通过各个视角的切换来系统完整的了解整个场景,本系统中一共设计了13个视点,一边系统完整的观看整个场景;加入灯光效果使整个场景变得通透明亮,更便于观看。如图4-15所示为视点、灯光的实现。以下为实现视点、灯光的代码:DEF nav0NavigationInfo{headlightTRUE}DEFhuikeViewpoint{position 70-40630description"huiketing"orientation 0102fieldOfView 1jumpFALSE }图4-15视点、灯光实现的效果图程序代码中NavigationInfo为头灯,当选择TRUE时为开启状态,使整个场景变亮。huike为一个固定视点,通过调节程序里的position等值确定其位置等属性。4.4.2使用VRML构建跟随视点为了方便用户观看动态效果,例如超市中购物车的行走路线,特在购物车内加入跟踪视点,使用户能够轻而易举的扫瞄超市的布局场景,模拟出真实的购物感受。如图4-16、4-17、4-18所示为跟踪视点的实现。以下为实现购物车跟踪视点的代码:DEFshoukuanViewpoint{position -78-44.29-120orientation 010-1.571description"shoukuan"fieldOfView 1jumpFALSE}DEFcarTouchSensor{}DEFBox01-TIMERTimeSensor{loopFALSEcycleInterval3.333},DEFBox01-POS-INTERPPositionInterpolator{key[0,0.03,……0.93,0.96,0.99,1,]keyValue[-50-88-500,……-50-88-130,]},ROUTEcar.touchTime TOBox01-TIMER.startTimeROUTEBox01-TIMER.fraction_changedTOBox01-POS-INTERP.set_fractionROUTEBox01-POS-INTERP.value_changedTOBox01.set_translation图4-16购物车跟踪视点实现的原始图4-17购物车跟踪视点实现的过程图图4-18购物车跟踪视点实现的最终效果图程序中第一条路由的作用是接触传感器car的touchTime事件域传递域值给时刻传感器Box01-TIMER的startTime域;第二条路由是时刻传感器Box01-TIMER的fraction_changed事件域传递域值给位置插补器Box01-POS-INTERP的set_fraction事件域;第三条路由的作用是位置插补器Box01-POS-INTERP的value_changed事件域传递域值给Transform节点Box01的set_translation域,完成购物车跟踪视点动画的实现。第5章使用JavaScript构建动态场景的交互5.1使用JavaScript构建动态场景交互功能的实现Script节点能够描述一个由用户制作的感应器和内插器。这些感应器需要一些关于域、eventIn事件和eventOut事件的列表。这些由用户制作的感应器和内插器还需要一个关于这些节点在处理上述域、eventIn事件和eventOut事件时所要做动作的描述[13]。这些由用户制作的感应器和内插器的域、eventIn事件和eventOut事件还描述了节点动作的借口。具体来讲,一个用来计算跌落物体路径的Script节点,应该具有一个域,那个域包含了重力的大小、物体的初始高度、物体向前运动的速度以及其他特征。相同的重力Script节点能够包含一个时刻片段的eventIn事件,比如取自一个Timesensor节点或一个三维空间位置的eventOut事件,后者能够被规定为一个自由下落物体的转换节点。所有这些域、eventIn事件和eventOut事件就定义了一个重力Script节点的接口。除了接口之外,由用户制作的感应器和内插器还需要一个关于具体要做什么情况的描述[14]。这种描述确实是一个程序脚本,典型的为用Java或JavaScript写成的程序脚本。举例来讲,一个关于自由落体的Script节点的程序脚本,用来计算产生一个动画自由落体的路径所必需的数据。首先定义Script节点中的各域域值,接着便设置路由(Route)。使VRML中的其它节点与Script节点联系起来。当与Script节点有联系的节点发生事件时,事件通过路由传给Script节点的eventIn域,Script节点则通过url域中指定的地址找到java类,该类必须继承自Script类。Java类开始工作,最先执行的是initialize()方法——进行初始化工作。在initialize()方法中必须获得Script节点中eventIn或field域的值,或者把java中的值返回给Script中的eventOut域。getField、getEventIn、getEventOut差不多上Script类提供的方法。作为参数的fieldName、eventInName、eventOutName要与Script节点中定义的名称相符合,对应的Field类的子类也要与Script节点中定义的各种Type类型一致。Field类的子类存在于vrml.filed包中,它提供getValue()和setValue()方法。初始化完成后通过Script类提供的processEvent(Eventp0)或processEvents(intp0,Event[]p1)方法来捕获Script节点传递的事件。processEvent和processEvents方法是所有外部事件公共的输入点。Java程序通过替代这两个方法对事件做出相应的处理。VRML包中Event类的getName()方法返回事件名称,确定发生的事件,从而做出相应的处理。Event类的getValue()方法则返回一个ConstField类的实例。ConstField类是Field类的子类,它没有setValue()方法,因而只能取出Script节点中eventIn域的值,而不能修改。所有事件处理完后程序就调用Script类中的eventsProcessed方法,在这儿能够加入用户想要实现的动画交互等各种效果[15]。5.1.1利用JavaScript创建微波炉旋转加热动画使用JavaScript脚本语言创建制作微波炉加热旋转动画,通过旋动旋钮使炉内食物开始旋转加热,同时有指示灯的明暗变化表示温度变化,并配有微波们门开启声音。如图5-1、5-2所示为通过旋转旋钮加热食物的效果。以下所示为实现通过旋转旋钮加热食物的交互功能的代码:DEFkaiguan1 CylinderSensor{}DEFtimerTimeSensor{cycleInterval 0.001loop TRUE}DEFsScript{eventInSFTime openfieldSFNode obq USEbosfieldSFNode obboxUSEtuopanfieldSFNode obt USEniu2url "javascript:functionopen(value){obbox.rotation.angle=obt.rotation.angleobq.diffuseColor.r= obt.rotation.angle/15}"}DEFclock1TimeSensor{cycleInterval6loopFALSE} DEFaOrientationInterpolator{key [0.00.10.20.30.40.50.60.70.80.91]keyValue[0010.0……0010.0]}DEFs1TouchSensor{}Sound{sourceDEFCCAudioClip {url"weibolu.mp3"}} ROUTEs1.touchTimeTOCC.startTimeROUTEs1.touchTimeTOclock1.startTimeROUTEclock1.fraction_changedTOa.set_fractionROUTEa.value_changedTOmen.set_rotationROUTEa.value_changedTOping.set_rotationROUTEkaiguan1.rotation_changedTO niu1.set_rotationROUTEkaiguan2.rotation_changedTO niu2.set_rotationROUTEtimer.cycleTimeTOs.open图5-1通过旋转旋钮加热食物的原始图图5-2通过旋转旋钮加热食物的最终效果图程序中,第一条路由的作用是接触传感器s1的touchTime事件域传递域值给AudioClipCC的startTime域;第二条路由作用是接触传感器s1的touchTime事件域传递域值给时刻传感器clock1的startTime域;第三条是时刻传感器clock1的fraction_changed事件域传递域值给方向插补器a的set_fraction事件域;第四条作用是方向插补器a的value_changed事件域传递域值给Transform节点men的set_rotation域;同理,第五条的作用是方向插补器a的value_changed事件域传递域值给Transform节点ping的set_rotation域;第六条路由的作用是圆柱传感器kaiguan1的rotation_changed事件域传递域值给Transform节点niu1的niu1.set_rotation域;同6,第七条路由的作用是圆柱传感器kaiguan2的rotation_changed事件域传递域值给Transform节点niu2的niu2.set_rotation域;第八条路由的作用是时刻传感器timer的cycleTime事件域传递域值给脚本s的open事件域,完成通过旋转微波炉旋钮加热事物的交互功能。5.1.2利用JavaScript构建洗手池水龙头的的交互功能在显示生活中,洗菜池是厨房中必不可少的组成部分,在本次设计中完全还原了现实生活中的水龙头,利用script实现其调节龙头方向和操纵出水大小的交互功能,并配有流水声且会随水流大小有声音强弱的变化。如图5-3、5-4所示为调节水龙头方向和出水大小的效果图。以下所示为实现水龙头方向和出水大小的交互功能的代码:DEFxuanzhuanCylinderSensor{maxAngle1.57minAngle-1.57}DEF KSSScript{fieldSFNodeshuilongkaiguanUSEniu1fieldSFNodeshuilongkaiguanUSEniu2fieldSFNodeliushuiUSEliushuifieldSFNodeliushuishenUSEliushuisheneventInSFBoolshuishenurl ["javascript:functionkeydown(value){if(shuilongkaiguan.rotation.angle){liushui.scale.x=shuilongkaiguan.rotation.angle/1.57;liushui.scale.z=shuilongkaiguan.rotation.angle/1.57;}}functionshuishen(value){liushuishen.spatialize=1;}]}Sound{sourceDEFmovieMovieTexture{url"shui02.gif"ROUTEkai1.rotation_changedTO longtou.rotationROUTExuanzhuan.rotation_changedTO niu1.rotationROUTEniu1.rotation TOKSS.keydownROUTExuanzhuan.isActiveTO KSS.shuishen图5-3调节水龙头方向和出水大小效果图1图5-4调节水龙头方向和出水大小效果图2该程序中第一条路由的作用是圆柱传感器kai1的rotation_changed事件域传递域值给Transform节点longtou的rotation域;第二条路有是圆柱传感器xuanzhuan的rotation_changed事件域传递域值给Transform节点niu1的rotation域;第三条是Transform节点niu1的rotation域传递域值给脚本KSS的keydown事件域;第四条是圆柱传感器xuanzhuan的isActive域值传递给脚本KSS的事件域shuishen,shuishen函数内部有一个条件推断语句if,推断水流的大小和水声的强弱,从而实现调节水龙头方向和出水大小的交互功能。5.1.3利用JavaScript构建燃气灶开关和火焰大小的交互功能现实餐厅中燃气灶是要紧的烹饪工具,通过旋钮调节火焰大小掌握火候的使用关键,本次设计中燃气灶的设计旨在实现这一功能,利用多种传感器和script结合实现这一交互功能并配有火焰声。如图5-5、5-6所示为实现燃气灶开关和火焰大小的交互功能。以下所示为实现燃气灶开关和火焰大小的交互功能的代码:DEFniu1Transform{children[DEFkai1CylinderSensor{maxAngle3.14}Inline{url"anniu.wrl"}]}DEFtimerTimeSensor{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论