6章虚拟现实的编程技术_第1页
6章虚拟现实的编程技术_第2页
6章虚拟现实的编程技术_第3页
6章虚拟现实的编程技术_第4页
6章虚拟现实的编程技术_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

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

文档简介

VR编程技术VRToolkits虚拟现实实编程工工具包是面向对对象功能能扩展库库,帮助助VR的的开发者者;支持各种种VR中中常见的的I//O设设备(开开发者不不用写驱驱动程序序);允许输入入CAD模型型(节节省时间间)、编编辑形状状、指定定对象的的层次结结构,碰碰撞检检测和多多层次的的细节,,遮荫荫和纹理理,运行行时间管管理;;具有内置置网络功功能,用用于多用用户交互互。虚拟现实实工具包包可分为为:是否基于于文本或或图形化化编程;;所使用的的语言和和软件库库大小的的类型;;支持I//O设备的的类型;;提供绘制制的类型型;一般目的的还是特特殊应用用;是否专有有(更多多的功能能,更好好地记录录文档))或公共共领域((免费,,少量文文档和功功能)在九十年年代的虚虚拟现实实工具包包RenderWare(Cannon),VRT3/Superscape(DimensionLtd.)),CyberspaceDeveloperKit(Autodesk)),CosmoAuthoringTool((SGI/Platinum/CA),Rend386及其它;;允许任何何基于文文本的编编程:((RenderWare,CDKandRend386),或或者图图形编程程:((SuperscapeandCosmo));独立于平平台,一一般并不不需要图图形加速速硬件;;往往用““低端””I//O设备((鼠标)),并并支持平平面着色色,以以保证快快速绘制制。Rend386场景景本章讨论论的VR软件件工具包包名称应用专有语言库规模Java3D(SunMicrosystems)一般应用no用C完成用Java编程19工具包,275类VizardToolkitandPeoplePak(WorldViz)一般应用扩展精灵yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom触觉yesC++PeopleShop(BostonDynamics)军事/民用

yesC/C++3DGameStudio游戏引擎

yes

C++场景图::是物体的的一个分分层组织织(可可见或不不可见))在虚虚拟世界界中(或或“宇宙宙”));场景图用用树状结结构表示示,节点点用枝连连接;可见物体体用外部部节点表表示,称称为叶子子(他们们有没有有子女))。例例如节点点F,,G,,H,,I内部节点点表示转转变(即即适用于于所有的的子女))ABCEDJFGHI根节点内部节点点外部节点点手掌场景球场景图表表明球是是场景的的孩子节节点场景图不不是静态态的手掌场景球场景已经经被修改改,球球现在是是手掌的的孩子VC6.1onbookCD建模阶段段模型几何何设置定义并连连接传感感器定义动作作函数定义场景景图定义网络络实时循环环开始仿真更新物体(从传感器和智能行为)绘制场景(图形,声音,触觉)读传感器数据退出仿真每一帧循循环名称应用专有语言库规模Java3D(SunMicrosystems)一般应用no用C完成用Java编程19工具包,275类VizardToolkitandPeoplePak(WorldViz)一般应用扩展精灵yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom触觉yesC++PeopleShop(BostonDynamics)军事/民用

yesC/C++3DGameStudio游戏引擎

yes

C++本章讨论论的VR软件件工具包包Java及Java3DJava面向对象象的程序序设计语语言用于网络络应用开开发平台独立立比C//C+++慢Java3DJava类的的层次,,作为3D图形形绘制和和声音绘绘制系统统的接口口完美地集集成了Java很强壮的的面向对对象的体体系结构构有利的3D图图形应用用程接口口(API))Java3D初始化建模几何何建立传感感器定义行为为定义场景景图网络Java3D初始化建模几何何建立传感感器定义行为为定义场景景图网络Java3D几何何:几何可以以从各种种文件格格式导入入(如如.3DS,,DXF,LWS,NFF,,OBJ,VRT,VTK,,WRL)能够作为为图元产产生((例如..sphere,cone,cylinder,,…))用特定的的类指定定顶点、、边、法法向量、、纹理坐坐标产生生定制几几何导入几何何loader..load(““Hand.wrl"")几何图元:newSphere(radius)定制几何何:newGeometryArray(……)newLineArray(…))newQuadArray(…))newTriangleArray(……)Java3D物体体外观::几何的外外观用外外观对象象给定一个外观观类对象象存储有有关材料料(漫反反射、镜镜面反射射….diffuse,specular,,shininess,opacity))和纹理理Mat==newMaterial(();Mat..setDiffuseColor(r,,g,,b));Mat..setAmbientColor(r,,g,,b));Mat..setSpecularColor(r,g,b);TexLd==newTextureLoader(“checkered..jpg”,.....);Tex==TexLd.getTexture();;Appr=newAppearance(();Appr.setMaterial(Mat);;Appr.setTexture((Text);;Geom.setAppearance((Appr)Java3D初始始化建模几何何建立传感感器定义行为为定义场景景图网络Java3D节节点类类型:节点组叶子树枝组组变换组选择背景行为雾光照3D形形状Compilablesub-graphTransform++childnodesSelectwhichofthechildrenarevisible(usefulforLOD)Universebackground.CanbeacolororanimageActionstobeperformedbythesimulationFognodeLightnode.Specialderivedclasses:AmbientLight,PointLight,DirectionalLightGeometry++Appearance++BoundingBoxJava3D场场景图图节点全局根正方体球手拇指食指中指无名指小拇指SceneSc==loader.load(“Hand.wrl”));BranchGroupBg==Sc.getSceneGroup(();RootNode.addChild(Bg);;Java3D模模型导导入SceneSc==loader.load(“Hand.wrl”));BranchGroupBg==Sc.getSceneGroup(();Thumb==Bg.getChild(0));Index==Bg.getChild(1));Middle==Bg.getChild(2);Ring=Bg..getChild((3);;Small==Bg.getChild(4));把模型加加入场景景的图中中访问导入入模型的的子零件件部分Palm=loader.load(("Palm..wrl")..getSceneGroup());ThumbProximal=loader.load(("ThumbProximal..wrl")..getSceneGroup());ThumbDistal==loader.load("ThumbDistal.wrl"").getSceneGroup();;IndexProximal=loader.load(("IndexProximal..wrl")..getSceneGroup());IndexMiddle==loader.load("IndexMiddle.wrl"").getSceneGroup();;IndexDistal==loader.load("IndexDistal.wrl"").getSceneGroup();;MiddleProximal==loader.load("MiddleProximal.wrl"").getSceneGroup();;MiddleMiddle==loader..load(""MiddleMiddle.wrl")).getSceneGroup(();MiddleDistal==loader..load(""MiddleDistal.wrl")).getSceneGroup(();RingProximal==loader..load(""RingProximal.wrl")).getSceneGroup(();RingMiddle=loader.load(("RingMiddle..wrl")..getSceneGroup());RingDistal=loader.load(("RingDistal..wrl")..getSceneGroup());SmallProximal=loader.load(("SmallProximal..wrl")..getSceneGroup());SmallMiddle==loader.load("SmallMiddle.wrl"").getSceneGroup();;SmallDistal==loader.load("SmallDistal.wrl"").getSceneGroup();;Java3D虚虚拟手手的导入入:Java3D虚虚拟手手的层次次:Palm.addchild(ThumbProximal));ThumbProximal.addchild(ThumbDistal));Palm.addchild(IndexProximal));IndexProximal.addchild(IndexMiddle));IndexMiddle..addchild((IndexDistal));Palm.addchild(MiddleProximal);;MiddleProximal..addchild((MiddleMiddle);;MiddleMiddle..addchild(MiddleDistal));Palm.addchild(RingProximal));RingProximal..addchild(RingMiddle));RingMiddle.addchild(RingDistal);;Palm.addchild(SmallProximal));SmallProximal.addchild(SmallMiddle));SmallMiddle..addchild((SmallDistal));Java3D初初始化化建模几何何建立传感感器定义行为为定义场景景图网络Java3D中中的输输入设备备:Java3D中中默认认的输入入设备是是鼠标和和键盘;;目前VR应用中中集成其其它的输输入设备备(位置置传感器器,跟跟踪球,,游戏戏杆…))完全由由开发者者的需要要而决定定;通常驱动动程用C/C+++写,,使用用人员可可以使用用Java重写写驱动程程序,也也可以使使用JNI((JavaNativeInterface)来调调用C/C+++版版本的驱驱动程。。后者是是更加需需要的..Java3D提提供很很好的通通用输入入设备接接口,可可以用于于集成传传感器..然而而,开开发人员员还是选选择传统统的方法法.Java3D通通用传传感器接接口classPhysicalEnvironment-存存储全部部输入设设备和仿仿真中的的传感器器的信息息classInputDevice–输入入设备驱驱动程序序接口classSensor–提供供实时数数据的对对象类物理环境输入设备传感器一个输入入设别能能提供一一个或多多个传感感器一个传感感器不需需要和一一个输入入设备关关联(VRML类型型传感器器)Java3D初初始化化建模几何何建立传感感器启动场景景定义场景景图网络Java3D––启启动仿真真Java3D提提供控控制仿真真的Behavior对象一个Behavior对象包包含一些些列仿真真中接受受的动作作一个刺激激由WakeupCondition对对象发出出一些激活活的类::WakeupOnCollisionEntryWakeupOnCollisionExitWakeupOnCollisionMovementWakeupOnElapsedFramesWakeupOnElapsedTimeWakeupOnSensorEntryWakeupOnSensorExitWakeupOnViewPlatformEntryWakeupOnViewPlatformExitJava3D––行行为(Behavior)的的使用用WakeupOnElapsedFramesWup=newWakeupOnElapsedFrames(0);Bhv..wakeupOn((Wup);全局根节点我们定义义一个行行为Bhv,,它按按照1度度旋转球球;我们想让让这个行行为每一一帧都被被调用,,以便球球能够转转动VC6.3onbookCDVC6.4onbookCDJava3D的View对象描述述仿真中中的图形形显示,,和用户户位置((由跟踪踪器给出出的)View模型提供供了由ViewPlatform节点提供供的虚拟拟世界和和用于交交互的I/O设设备的分分离;一些被跟跟踪的用用户可以以映射到到虚拟世世界的相相同的位位置;这这对应几几个Views和一一个ViewPlatform相反,一一个用用户能够够控制几几个ViewPlatforms;这些对应应几个Views,,因为ViewPlatform有自己的的View;这样样一个用用户可以以有几个个Views与虚虚拟世界界对应,,它们们之间可可以通讯讯.Viewplatform1Viewplatform2Java3D初初始化化建模几何何建立传感感器定义行为为定义场景景图网络Java3DsimulationJavaApplicationJava3DsimulationJavaAppletJava3DsimulationJavaApplicationJava3D––网网络Java3D不不提供供内置的的网络虚虚拟环境境的解决决方案然而,它它允许许开发者者集成使使用Java提提供的的强大的的网络特特征Java3D应应用程序序能够像像标准的的应用程程序一样样运行。。Java3DsimulationJavaAppletServerJava3D与与VRMLVRML提供了了在虚拟拟世界中中定义对对象并启启动对象象的可能能图形用户户接口((APIs)),例如如Java3D或WTK从从VRML文件件载入模模型的静静态信息息,而忽忽略了传传感器、、路径和和脚本等等信息;;Java3D和和WTK的的比较Java3d((版本本1..3beta1)和和WTK((Release9)之之间的比比较进行行了研究究;运行于双双PentiumIII933MHzPC((Dell),,512M字节内内存RAM,Wildcat4110图形形加速器器,64M字节RAM;I/O接接口是theRutgersMasterII力力反馈馈手套;;场景包括括几个球球(每每个球420个个多边形形)和虚虚拟手((2,,270个多边边形);;球绕任意意轴不断断地旋转转,手或或者是转转动的,,或者是是有用户户驱动的的.Java3D––WTK比比较实验中用用的图形形场景Java3D与与WTK比较较用于判断断性能的的仿真变变量:图形模式式(非非立体的的,立立体的)),绘制模式式(线线框,Gouraud,纹纹理));场景复杂杂度((多边形形数目5,000––50,000));光照((光源数数目1,5,10);;交互((无交互互,手手输入,,力反馈馈)Java3D––WTK比较较Java3d平平均比比WTK快,,Java3D––WTK比比较Java3d版版本3.1Beta1比比WTKRelease9具具有较小小延迟但Java3d在在场景绘绘制时间间上变化化较快WTK不不会偶偶尔出现现峰值,,不会出出现偶尔尔的冻结结本章讨论论的VR工具包包名称应用专有语言库规模Java3D(SunMicrosystems)一般应用no用C完成用Java编程19工具包,275类VizardToolkitandPeoplePak(WorldViz)一般应用扩展精灵yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom触觉yesC++PeopleShop(BostonDynamics)军事/民用

yesC/C++3DGameStudio游戏引擎

yes

C++Vizard特特征::使用Python,它它是可升升级和跨跨平台的的;它是面向向对象的的,很容容易集成成C/C++运行于Unix,Windows,Mac和和其它它平台;;使用一个个4-window““工作作台”,,允许变变成人员员写并执执行代码码,检查查3Dmodels,拖拖放对对象,发发出命命令同时时绘制场场景.脚本栈––当当输入的的时候,,错误用高高亮度标标记交互窗口口–输入命令令资源窗口口–文本列表表3D窗窗口––开发每个个物体Workbench的的使用用:图标菜单单用鼠标开开发场景景导入物体体importviz

importhand

viz.go())

#Identifythe5DTglove'sport.PORT_5DT__USB=0##Addthe5DTsensorsensor==viz..add('5dt..dls')##Createahandobjectfromthedataglove

glove=hand.add((sensor,hand..GLOVE__5DT)##Placethehandinfrontoftheuser

glove.translate(0,1,,5)glove..rotate(180,--90,,180)#nowwhenyourunthescriptthegloveshouldbemovingVizard虚虚拟手手:importviz

viz.go())logo==viz.add(('logo..wrl')##addvizardlogoandplaceitinfrontofuserlogo.translate(0,2,,4)tex1==viz..add('gb_noise.jpg'')##addtwotexturesthatwillthenbeappliedtothelogo#tex2==viz.add(('brick.jpg'))

logo..texture(tex1)##appliesthefirsttexturelogo.texture((tex2,''',1)##appliesthesecondtexturetothelogoblend==viz.add(('multitexblend..fp'')##indicatehowtoblendthetwotextureslogo.apply(blend)Vizard多多纹理理:Vizard仿仿真服服务器::多于一个个用户存存在同一一个环境境中,每每个用户户需要运运行Vizard..Aftertheworldissetup当当虚拟世世界建立立后,每每个用用户必须须建立两两个““mailboxes”..一个接收收来自其其它用户户的信息息。User2User1PositionisthepropertyBallistheobjectactioninformationVizard网网络举举例:ImportvizViz..go(()Ball=viz.add((‘ball..wrl’)##createaBallobjectthatiscontrolledbytheotheruser#addtheworldthatwillbedisplayedonyourcomputer#Useaprompttoasktheotheruserthenetworknameofhiscomputer.target_machine==viz..input(('Enterthenameoftheothermachine')..upper()##Addamailboxfromwhichtosendmessagestotheotheruser.Thisisyouroutbox.target_mailbox==viz..add(viz.NETWORK,target__machine)#Addanidforthetimer..

BROADCAST==1##Addthetimer.defmytimer(num)):ifnum===BROADCAST:##Retrieveyourcurrentposition.position==viz.get((viz.HEAD__POS)##Sendthedatatothetargetmailbox.Alltherecipientwillgetyouryaw,,xandzcoordinates..target__mailbox.send(position[0]],position[1],position[[2]))Vizard网网络举例例:#Thisfunctionwilldealwithincomingmessages.defmynetwork(message):##message[0]iswhosentthemessage,message[1]isadescriptionofwhathe##sentandmessage[2]andgreaterarethemessagesthemselves..x==message[[2]y=message[3]z==message[4]]ball.translate((x,y,z))##Callbackthenetworkfunctiontoawaitincomingmessages.viz..callback((viz.NETWORK__EVENT,,mynetwork)##Callbackthetimer..viz..callback((viz.TIMER_EVENT,mytimer)##Startthetimer.viz.starttimer((BROADCAST,0.01,--1)

本章讨论论的VR工具包包名称应用专有语言库规模Java3D(SunMicrosystems)一般应用no用C完成用Java编程19工具包,275类VizardToolkitandPeoplePak(WorldViz)一般应用扩展精灵yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom触觉yesC++PeopleShop(BostonDynamics)军事/民用

yesC/C++3DGameStudio游戏引擎

yes

C++PHANToM的GHOST软软件包提供真实实感的触触觉交互互;提供并使使触觉交交互更直直观提供触觉觉交互的的场景图图,利用用3D图图形APIs提供触觉觉交互技技术的扩扩展环境境;与PHANTOM点触觉觉交互;基于用户户定义的的力模型型几何;;对力反应应的几何何运动xyz(0,0,0)PHANToMDesktopmodelGHOST––应用用交互xyz(0,0,0)应用处理触觉加工场景产生碰撞检测碰撞反映触觉状态更新结束触觉绘制触觉循环30fps场景绘制1000HzGHOST触触觉场景景图xyz(0,0,0)应用处理触觉加工场景产生碰撞检测碰撞反映触觉状态更新结束触觉绘制触觉循环30fps场景绘制1000Hz触觉场景景图提供一种种构造触触觉场景景的结构构化方法法,包括括几何和和动态的的;自顶向下下遍历((与WTK不不同);;每个节点点只被遍遍历一次次(每每个子节节点只有有一个双双亲节点点)GHOST节节点类3DsupportStaticNodesDynamicNodesUtilityClassesGHOST九九个节点点类GHOST九九个节点点类(continued)GHOST九九个节点点类(continued)场景图举举例yxzHeadyxzLeftShoulderyxzRightShoulderyxzRightElbowyxzLeftElbowyxzTorsoyxzBody静态场景景图––仅仅仅分离的的和几何何节点作作为叶子子GHOST代代码举例例:#include<<stdlib.h>>#include<<gstBasic..h>#include<<gstSphere.h>>#include<<gstPHANToM.h>#include<<gstSeparator.h>>#include<<gstScene..h>Main()gstScene**scene==newgstScene;;gstSeparator**root==newgstSeparator;gstSphere**sphere==newgstSphere;;Sptere-->setRadius(20);gstPHANToM*phantom=newgstPHANToM((```PHANToMname``));Root->>addChild(phantom));Root->addChild((sphere);Scene->>setRoot((root);;Scene-->startServoLoop());While(!!scene-->getDoneServoLoop()))//endapplicationbycallingscene-->stopServoLoop());力计算和和动力学学xyz(0,0,0)应用处理触觉加工场景产生碰撞检测碰撞反映触觉状态更新结束触觉绘制触觉循环30fps场景绘制1000Hz碰撞检测测与反应应场景图包包含至少少一个通通过gstPHANToM表示的触触觉接口口的节点点(一个个触觉场场景中有有四个触触觉接口口);碰撞检测测用gstShape节点进行行;当碰撞检检测存在在时,gstPHANToM_SCP被加入到到场景图图中,这这个节点点应该加加入到相相同双亲亲的下面面,作为为gstPHANToM节点。NormalForce(dependsonspringanddampercoefficients)FrictionForce(dependsonstaticanddynamicfrictioncoefficients)碰撞检测测下,计计算力;;通过动态态效果进进行碰撞撞反应((活动动节点,,动态态固体));如果必要要通知应应用系统统(用用户定义义的)..碰撞检测测与反应应动态节点点gstDynamic节点对于于其下面面的节点点加上运运动能力力,在gstDynamic下面的子子树表示示一个物物力的动动态物体体;由gstPHANToM节点与物物体碰撞撞产生的的力被加加入到gstDynamic节点的状状态之中中;变换(旋旋转、平平移)总总是应用用到gstDynamic节点;具有四个个派生类类:gstDial,gstButton,gstSlider和gstRigidBody.动态节点点(continued))当一个gstDynamic节点改变变状态时时,一一个调用用用户定定义的函函数的事事件产生生.例如––如果果gstButton从pressed状态变为为released状态态时,应应用程序序退出。。gstButton行为举例例更新应用用xyz(0,0,0)应用处理触觉加工场景产生碰撞检测碰撞反映触觉状态更新结束触觉绘制触觉循环30fps场景绘制1000Hz图形及回回调函数数用户需要要确定哪一个节节点用回调函函数,需需要发送送给回调调函数的的信息是什么。。应用程序序通过调调用回调调函数更更新信息息。这些些节点具具有调用用返回的的定义,,并具有有一个更更新的状状态,上上次调用用的updateGraphics将把他们们的当前前的状态态拷贝到到所定义义的数据据结构中中。回调函数数把来自自GHOST触触觉过程程的场景景触觉节节点的信信息传递递给应用用过程。。例如,用用户产生生一个表表示节点点gstPHANToM当前位置置的回调调函数,,在碰撞撞之后就就应该改改变回调调gstPHANToM_SCP,这样用户户可以看看到物体体上接触触点的位位置。将用户映映射到触触觉场景景中Phantom工作空间用户工作作空间摄像机映映射到PHANToM工作作台CameraPhantomworkspacez-axisPhantomworkspaceCameraPhantomworkspacephantomSep变换MrotationphantomSep变换McameraphantomSep变换MzaxisOffset缩放摄像像机和PHANToM工工作空间间摄像机工工作空间太大大摄像机工工作空间太小小摄像机工工作空间适当当CameraPhantomworkspaceCameraPhantomworkspaceCameraPhantomworkspace缩放摄像像机和PHANToM工工作空间间CameraDxmaxDphantomxmax规模因子子依赖于于从焦距距到可视视平截头头体(frustum)的距距离从非规模模的PHANTOM工作作空间中中心到面面的边缘缘的距离离Dphantomxmax必须是确确定的规模因子子为Sfrustum=Dxmax/Dphantomxmax缩放摄像像机和PHANToM工工作空间间为了维持持触觉的的逼真度度,gstShape节点的物物理属性性(柔性性和阻尼尼)也需需要进行行同样的的缩放;;SurfaceKspringnew=SurfaceKspringcurrent/SfrustumSurfaceKdampingnew=SurfaceKdampingcurrent/Sfrustum其中SurfaceKspring和SurfaceKdamping分别是gstShape的柔性参参数和阻阻尼参数数本章讨论论的VR工具包包名称应用专有语言库规模Java3D(SunMicrosystems)一般应用no用C完成用Java编程19工具包,275类VizardToolkitandPeoplePak(WorldViz)一般应用扩展精灵yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom触觉yesC++PeopleShop(BostonDynamics)军事/民用yesC/C++3DGameStudio游戏引擎

yes

C++BDIPeopleShop/DI-Guy特特点提供了一一种在实实时场景景中模拟拟人物的的使用方方法;是一种任任务层次次的变成成环境,,结合基基于菜单单的图形形用户接接口(GUI)任务映射射到预先先定义好好的实时时插值的的关联运运动之中中;非常适合合分布式式交互仿仿真(DIS)。。因为低低带宽需需求和预预测;起初为军军事而设设计,现现在用于于民用,,例如,,事件回回放、建建筑漫游游、仿真真驱动、、警察训训练。连接的对对象库,,可以运运行于SGI,IntelPCs,,和其其它平台台;库具有实实时动作作引擎模模块、图图形显示示模块、、运动数数据、3D图形形模型、、纹理和和用于DIS的的网络接接口;运行于OpenGL,,Direct3D,Sense8WTK,MakStealth和和其它软软件包;;建议的硬硬件是Intel>>200MHz,,64MBRam,和和图形形加速器器、((OpenGL,,OpenGVSorDirect3D)).BDIPeopleShop/DI-Guy特特点--续PeopleShop初始化场景几何何定义传感感器定义行为为定义人物物路径定义网络络PeopleShop初始化场景几何何定义传感感器定义行为为定义人物物路径定义网络络PeopleShop人物物具有54自由度度(DOF),,11连接接点(links)的的关节多多边形结结构;车也作为为人物;;不同人物物具有不不同的动动作;每一种类类型人物物具有用用户选择择的外观观(例如如,人物物的车可可以是坦坦克或警警车)人物使用用纹理增增加真实实感,并并减少多多边形的的数量。。人物选择择人物类型型决定可可以接受受的动作作(可可以选择择的菜单单)外观选择择Bob_shortsJoe_blueBridget_skirtDiane_teen人物外观观(可可选的菜菜单)BDI软软件包包Characterlevel--of--detailsegmentationbasedondistancetovirtualcameraimprovesreal-timeperformance((uptoabout100characterscanbeinascene)38polygons2500polygonsSupplementalbdi.DI-Guy-LOD..mpgPeopleShop初始化场景几何何定义传感感器定义行为为定义人物物路径定义网络络PeopleShop指定定路径路径途中点SlopeAdjuster初始路径径扩展路径径加入的途途中点BDI软软件包包ActionbeadEndbeadStackedactionbeadsLastactionbead编辑行为为VC6.6onbookCDVC6.5onbookCDPeopleShop初始化场景几何何定义传感感器定义行为为定义人物物路径定义网络络BDI软软件包包传感器边边缘当士兵进进入到传传感器区区域时,,系统会会发现察察觉-这这会触发发士兵B向A开开枪SoldierASoldierBPeopleShop传感感器传感器是是用户定定义的体体,在其其中当人人进入时时被发觉觉(PeopleShopUser’sManual)SensorboundarySupplementalbdi..farmhouse.mpgPeopleShop初始化场景几何何定义传感感器定义行为为定义人物物路径定义网络络PeopleShop行行为行为可以以反射((基于于传感器器接收的的信号));行为也可可以用决决策键((decisionbeads)给出;决策键((decisionbeads)可以放置置在人物物的路径径上((红颜色色);决策键((decisionbeads)的两个参参数是距距离distance和长度length;距离distance表明从决决策键起起始点的的距离;;长度length表明决策策键活动动区的起起始点距距离决策可以以转换为为脚本script::BDI软软件包包决策语句句(IF/THEN/ELSE))PeopleShop实时时性PeolpeShop初始化交互训练沉浸训练想定可视化用户用户用户PeopleShop实时性性PeolpeShop初始化交互训练沉浸训练想定可视化用户用户用户BDIPeopleShop软软件包用户使用用游戏杆杆或鼠标标与仿真真实时交交互,菜菜单限制制控制和和沉浸VC6.7PeopleShop实时时性PeolpeShop初始化交互训练练沉浸训练练想定可视视化用户用户用户BDIPeopleShop––实时时模式用户使用用跟踪器器和传感感器与仿仿真实时时交互Omni-directionaltreadmillSensorizedweaponPeopleShop初始化场景几何何定义传感感器定义行为为定义人物物路径定义网络络PeopleShop网络络在DIS环境境中修改改人物的的外形需需要更高高的带宽宽;车具有较较小的自自由度,,而具有有40个个关节的的人物以以20Hz更更新就就需要800包包/秒秒;人们仅仅仅在任务务级(动动作、位位置、速速度)上上更新,,而不更更新每个个节点。。这样产产生平滑滑仿真需需要大约约2包//秒;对于参与与者数量量多的仿仿真效果果很好,,例如军军事训练练;使用实况况定位((livereckoning)和和推算定定位(deadreckoning))

BDI软软件包包用推算预预测的DISBDI软软件包包使用实况况定位的的DIS人在在循环中中DI-GuymodelDI-Guymodel任务级的的改变(动作,,方向向,速速度)(fromKoechlingetal..,1997)PeopleShop“TopGun”(courtesyBostonDynamicsInc.))本章讨论论的VR工具包包名称应用专有语言库规模Java3D(SunMicrosystems)一般应用no用C完成用Java编程19工具包,275类VizardToolkitandPeoplePak(WorldViz)一般应用扩展精灵yesOpenGL-basedPythonscriptinglanguageGHOST(SensAbleTechnologies)Phantom触觉yesC++PeopleShop(BostonDynamics)军事/民用yesC/C++3DGameStudio游戏引擎yesC++3DGameStudio人人物使用A6游戏戏引擎,,提供了了简单的的快速的的编程构构造虚拟拟世界的的方法;;一种任务务级编程程环境和和基于菜菜单的图图形接口口(GUI)的的结合,,脚本本编程更更灵活;;适合多用用户仿真真通过局局域网((LANs))和广域域网(WAN)((TCP/IP及及UDP);;最初为游游戏设计计,现在在扩展为为VR编编程,性性能好,,价格可可以接受受($500))

3DGameStudio人人物3D引引擎允许许多用户户(多多个虚拟拟像机)),建建立在DirectX9图形形流水线线;具有剪切切的优化化;深入的通通过几何何LOD和纹理理细节的的优化;;表面可以以变形,,物体体可以是是动态的的人物动画画通过骨骨骼框架架表示。。3DGameStudio几几何的产产生我们可以以导入大大的模型型库,或或用另外外的建模模软件((3DStudioMax)建建好的模模型物体可以以用WorldEditor((WED)3Deditor产生3DGameStudio纹纹理凸凹不平平纹理光照映射射和多纹纹理3DGameStudio人物物动画动画可以以导入由由Maya产产生的,,或者者人物可可以用modeleditor创创建按照动作作定义的的帧物理与声声音引擎擎具有碰撞撞检测功功能,建建立在多多边形级级别上,,及物理理行为重重力、弹弹性和摩摩擦力Cscript–C+++的简单单版本,,用于产产生物理理行为,,同过函函数进行行I/O编程((键盘盘、鼠标标)静态、动动态3D声声音资源源,可编编程3DGameStudio初初始化3DGameStudio初初始化3DgameStudio游戏编编程举例例3DGameStudioOverviewPurposeQuickandeasycreationofinteractiverealtimeapplicationsSuitefor2Dand3Dmultimediaprojects,,especiallycomputergamesAdevelopmentsystem3Dengine2DenginePhysicsengineLeveldesignModelandterraineditorsC-ScriptprogramminglanguageHugelibrariesof3DobjectsandartworkWhatcanbemade1stpersongames3rdpersongamesroleplayinggamesflightsimulatorssportsgamesvirtualrealityoranyother2Dor3Dprojectyoucanimagine用3DGameStudio开发发的游戏戏ComponentsLevel//WorldEditer––WEDObjects,Textures,Lights,Sounds……ModelEditer––MEDModel,TerrainScriptEditer–SEDC-ScriptWorkflowandComponentsLevelEditer––WEDModelEditer––MEDScriptEditer–SEDDemo-techdemo..wmp3DGameStudioC-ScriptSyntaxSimilartoC//C+++VeryLikeJavaScriptComment:/*------*////------Statementendedby““;””FunctionsandobjectsVariablesOnlyonetype:varAsC/C+++types:int,float,double,long,short,char,boolean....Syntax::varname;varname==number;Examples:vara;varb==1;;varc==2..3;ArraySyntax::varname[n];varname[n]==value_1,,value_2,,....value_n;Example:vara[5]==0,,10,20,30,,40;StringsSyntaxstringname;((variablelength))stringname[n];((fixedlength))stringname=="characters";stringname==<characters>;Examplestringhello==""HelloWorld!!";stringelements[[10]];Objectsentityfonttextsoundpanelbmapmaterial……P

温馨提示

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

评论

0/150

提交评论