第6章虚拟现实的编程技术.ppt_第1页
第6章虚拟现实的编程技术.ppt_第2页
第6章虚拟现实的编程技术.ppt_第3页
第6章虚拟现实的编程技术.ppt_第4页
第6章虚拟现实的编程技术.ppt_第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软件工具包 场景图 是物体的一个分层组织 可见或不可见 在虚拟世界中 或 宇宙 场景图用树状结构表示 节点用枝连接 可见物体用外部节点表示 称为叶子 他们有没有子女 例如节点F G H I内部节点表示转变 即适用于所有的子女 根节点 内部节点 外部节点 场景图表明球是场景的孩子节点 场景图不是静态的 场景已经被修改 球现在是手掌的孩子 VC6 1onbookCD 建模阶段 模型几何设置 定义并连接传感器 定义动作函数 定义场景图 定义网络 实时循环 每一帧循环 本章讨论的VR软件工具包 Java及Java3D Java面向对象的程序设计语言用于网络应用开发平台独立比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 定制几何 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 graph Transform childnodes Selectwhichofthechildrenarevisible usefulforLOD Universebackground Canbeacolororanimage Actionstobeperformedbythesimulation Fognode Lightnode Specialderivedclasses AmbientLight PointLight DirectionalLight Geometry Appearance BoundingBox Java3D场景图 节点 从文件调入物体Java3D默认支持Lightwave和Wavefront模型文件其它格式的载入器可以免费从下列网址下载 http www j3d org utilities loaders html载入器把读入文件的内容加到场景图中 作为一个独立的物体 然而 它们提供了访问单独子部件的函数 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对象发出一些激活的类 WakeupOnCollisionEntryWakeupOnCollisionExitWakeupOnCollisionMovementWakeupOnElapsedFramesWakeupOnElapsedTimeWakeupOnSensorEntryWakeupOnSensorExitWakeupOnViewPlatformEntryWakeupOnViewPlatformExit Java3D 行为 Behavior 的使用 WakeupOnElapsedFramesWup newWakeupOnElapsedFrames 0 Bhv wakeupOn Wup 我们定义一个行为Bhv 它按照1度旋转球 我们想让这个行为每一帧都被调用 以便球能够转动 VC6 3onbookCD VC6 4onbookCD Java3D的View对象描述仿真中的图形显示 和用户位置 由跟踪器给出的 View模型提供了由ViewPlatform节点提供的虚拟世界和用于交互的I O设备的分离 一些被跟踪的用户可以映射到虚拟世界的相同的位置 这对应几个Views和一个ViewPlatform 相反 一个用户能够控制几个ViewPlatforms 这些对应几个Views 因为ViewPlatform有自己的View 这样一个用户可以有几个Views与虚拟世界对应 它们之间可以通讯 Viewplatform1 Viewplatform2 Java3D初始化 建模几何 建立传感器 定义行为 定义场景图 网络 Java3D 网络Java3D不提供内置的网络虚拟环境的解决方案然而 它允许开发者集成使用Java提供的强大的网络特征Java3D应用程序能够像标准的应用程序一样运行 Server Java3D与VRML VRML提供了在虚拟世界中定义对象并启动对象的可能图形用户接口 APIs 例如Java3D或WTK从VRML文件载入模型的静态信息 而忽略了传感器 路径和脚本等信息 Java3D在线资源 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工具包 Vizard特征 使用Python 它是可升级和跨平台的 它是面向对象的 很容易集成C C 运行于Unix Windows Mac和其它平台 使用一个4 window 工作台 允许变成人员写并执行代码 检查3Dmodels 拖放对象 发出命令同时绘制场景 脚本栈 当输入的时候 错误用高亮度标记 交互窗口 输入命令 资源窗口 文本列表 3D窗口 开发每个物体 Workbench的使用 图标菜单 用鼠标开发场景 导入物体 importvizimporthandviz go Identifythe5DTglove sport PORT 5DT USB 0 Addthe5DTsensorsensor viz add 5dt dls Createahandobjectfromthedatagloveglove hand add sensor hand GLOVE 5DT Placethehandinfrontoftheuserglove translate 0 1 5 glove rotate 180 90 180 nowwhenyourunthescriptthegloveshouldbemoving Vizard虚拟手 importvizviz 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 一个接收来自其它用户的信息 Vizard网络举例 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工具包 PHANToM的GHOST软件包 提供真实感的触觉交互 提供并使触觉交互更直观提供触觉交互的场景图 利用3D图形APIs提供触觉交互技术的扩展环境 与PHANTOM点触觉交互 基于用户定义的力模型几何 对力反应的几何运动 GHOST 应用交互 GHOST触觉场景图 触觉场景图 提供一种构造触觉场景的结构化方法 包括几何和动态的 自顶向下遍历 与WTK不同 每个节点只被遍历一次 每个子节点只有一个双亲节点 GHOST节点类 GHOST九个节点类 GHOST九个节点类 continued GHOST九个节点类 continued 场景图举例 静态场景图 仅仅分离的和几何节点作为叶子 GHOST代码举例 include include include include include includeMain 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 力计算和动力学 碰撞检测与反应 场景图包含至少一个通过gstPHANToM表示的触觉接口的节点 一个触觉场景中有四个触觉接口 碰撞检测用gstShape节点进行 当碰撞检测存在时 gstPHANToM SCP被加入到场景图中 这个节点应该加入到相同双亲的下面 作为gstPHANToM节点 碰撞检测下 计算力 通过动态效果进行碰撞反应 活动节点 动态固体 如果必要通知应用系统 用户定义的 碰撞检测与反应 动态节点 gstDynamic节点对于其下面的节点加上运动能力 在gstDynamic下面的子树表示一个物力的动态物体 由gstPHANToM节点与物体碰撞产生的力被加入到gstDynamic节点的状态之中 变换 旋转 平移 总是应用到gstDynamic节点 具有四个派生类 gstDial gstButton gstSlider和gstRigidBody 动态节点 continued 当一个gstDynamic节点改变状态时 一个调用用户定义的函数的事件产生 例如 如果gstButton从pressed状态变为released状态时 应用程序退出 gstButton行为举例 更新应用 图形及回调函数 用户需要确定哪一个节点用回调函数 需要发送给回调函数的信息是什么 应用程序通过调用回调函数更新信息 这些节点具有调用返回的定义 并具有一个更新的状态 上次调用的updateGraphics将把他们的当前的状态拷贝到所定义的数据结构中 回调函数把来自GHOST触觉过程的场景触觉节点的信息传递给应用过程 例如 用户产生一个表示节点gstPHANToM当前位置的回调函数 在碰撞之后就应该改变回调gstPHANToM SCP 这样用户可以看到物体上接触点的位置 将用户映射到触觉场景中 Phantom工作空间 用户工作空间 摄像机映射到PHANToM工作台 phantomSep变换Mrotation phantomSep变换Mcamera phantomSep变换MzaxisOffset 缩放摄像机和PHANToM工作空间 摄像机工作空间太大 摄像机工作空间太小 摄像机工作空间适当 Camera Phantomworkspace Camera Phantomworkspace Camera Phantomworkspace 缩放摄像机和PHANToM工作空间 规模因子依赖于从焦距到可视平截头体 frustum 的距离从非规模的PHANTOM工作空间中心到面的边缘的距离Dphantomxmax必须是确定的规模因子为Sfrustum Dxmax Dphantomxmax 缩放摄像机和PHANToM工作空间 为了维持触觉的逼真度 gstShape节点的物理属性 柔性和阻尼 也需要进行同样的缩放 SurfaceKspringnew SurfaceKspringcurrent SfrustumSurfaceKdampingnew SurfaceKdampingcurrent Sfrustum其中SurfaceKspring和SurfaceKdamping分别是gstShape的柔性参数和阻尼参数 本章讨论的VR工具包 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 shorts Joe blue Bridget skirt Diane teen 人物外观 可选的菜单 BDI软件包 Characterlevel of detailsegmentationbasedondistancetovirtualcameraimprovesreal timeperformance uptoabout100characterscanbeinascene Supplementalbdi DI Guy LOD mpg PeopleShop初始化 场景几何 定义传感器 定义行为 定义人物路径 定义网络 PeopleShop指定路径 路径 途中点 SlopeAdjuster 初始路径 扩展路径 加入的途中点 BDI软件包 Actionbead Endbead Stackedactionbeads Lastactionbead 编辑行为 VC6 6onbookCD VC6 5onbookCD PeopleShop初始化 场景几何 定义传感器 定义行为 定义人物路径 定义网络 BDI软件包 传感器边缘 当士兵进入到传感器区域时 系统会发现察觉 这会触发士兵B向A开枪 SoldierA SoldierB PeopleShop传感器 传感器是用户定义的体 在其中当人进入时被发觉 PeopleShopUser sManual Sensorboundary Supplementalbdi farmhouse mpg PeopleShop初始化 场景几何 定义传感器 定义行为 定义人物路径 定义网络 PeopleShop行为 行为可以反射 基于传感器接收的信号 行为也可以用决策键 decisionbeads 给出 决策键 decisionbeads 可以放置在人物的路径上 红颜色 决策键 decisionbeads 的两个参数是距离distance和长度length 距离distance表明从决策键起始点的距离 长度length表明决策键活动区的起始点距离决策可以转换为脚本script BDI软件包 决策语句 IF THEN ELSE PeopleShop实时性 PeolpeShop初始化 PeopleShop实时性 BDIPeopleShop软件包 用户使用游戏杆或鼠标与仿真实时交互 菜单限制控制和沉浸 VC6 7 PeopleShop实时性 PeolpeShop初始化 交互训练 沉浸训练 想定可视化 用户 用户 用户 BDIPeopleShop 实时模式 用户使用跟踪器和传感器与仿真实时交互 Omni directionaltreadmill Sensorizedweapon PeopleShop初始化 场景几何 定义传感器 定义行为 定义人物路径 定义网络 PeopleShop网络 在DIS环境中修改人物的外形需要更高的带宽 车具有较小的自由度 而具有40个关节的人物以20Hz更新就需要800包 秒 人们仅仅在任务级 动作 位置 速度 上更新 而不更新每个节点 这样产生平滑仿真需要大约2包 秒 对于参与者数量多的仿真效果很好 例如军事训练 使用实况定位 livereckoning 和推算定位 deadreckoning BDI软件包 用推算预测的DIS BDI软件包 使用实况定位的DIS人在循环中 DI Guymodel DI Guymodel 任务级的改变 动作 方向 速度 fromKoechlingetal 1997 PeopleShop TopGun courtesyBostonDynamicsInc 本章讨论的VR工具包 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游戏编程举例 M 3DGameStudioOverview Purpose QuickandeasycreationofinteractiverealtimeapplicationsSuitefor2Dand3Dmultimediaprojects especiallycomputergames Adevelopmentsystem 3Dengine2DenginePhysicsengineLeveldesignModelandterraineditorsC ScriptprogramminglanguageHugelibrariesof3Dobjectsandartwork Whatcanbemade 1stpersongames3rdpersongamesroleplayinggamesflightsimulatorssportsgamesvirtualrealityoranyother2Dor3Dprojectyoucanimagine 用3DGameStudio开发的游戏 Components Level WorldEditer WEDObjects Textures Lights Sounds ModelEditer MEDModel TerrainScriptEditer SEDC Script WorkflowandComponents LevelEditer WED ModelEditer MED ScriptEditer SED Demo techdemo wmp 3DGameStudio C Script Syntax SimilartoC C VeryLikeJavaScriptComment Statementendedby Functionsandobjects Variables Onlyonetype varAsC C types int float double long short char boolean Syntax varname varname number Examples vara varb 1 varc 2 3 Array Syntax varname n varname n value 1 value 2 value n Example vara 5 0 10 20 30 40 Strings Syntaxstringname variablelength stringname n fixedlength stringname characters stringname Examplestringhello HelloWorld stringelements 10 Objects entityfonttextsoundpanelbmapmaterial Pointers Pointersstorereferencestoobjectsorfunctionsentity name entity name entity string name string name string function name function name function Functions Syntax functionname pa

温馨提示

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

评论

0/150

提交评论