ImageVerifierCode 换一换
格式:PPT , 页数:23 ,大小:10.87MB ,
资源ID:10358783      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10358783.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(虚拟现实课件_第6章(教师-王洪群).ppt)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

虚拟现实课件_第6章(教师-王洪群).ppt

1、1,虚拟现实技术,讲课老师: 王洪群,whq_,2,第六章 VR编程,工具包和场景图,WorldToolKit,JAVA 3D,通用触觉开放软件工具包,PeopleShop,3,VR工具包,一、工具包和场景图,VR工具包:是一个为VR设计的可扩展的面向对象的函数库。被仿真的对象是类的一部分,能继承这些累的默认属性,因而可以简化编程任务。,底层图形语言:OpenGL,WorldToolKit,Java 3D,VRML,通用工具包,GHOST,PeopleShop,支持跟踪器、传感手套、HMD和工作台等多种IO设备。专有的,公用的工具包,用于触觉编程,用于军事仿真,4,场景图:在图形编程或触觉编程

2、中的一项创作任务就是创建场景图。它是虚拟世界中所有对象(可见的或者不可见的)以及世界视图的层次组织。,在应用程序阶段,CPU执行场景图中各个部分(子树)和虚拟相机观察体的相交测试,如果包围体与观察体相交,则它所包含的所有对象送到流水线。,叶节点表示可见对象以及它们的属性(几何、外观和行为),又成外部节点。,内部节点:通常表示变换。用于确定他们的子对象与根对象以及其他对象在空间中的位置关系。,在场景图中,球的叶节点(包含它的几何属性和颜色属性)是内部节点的一个子节点,通过改变内部节点的值,可以反映出球的跳跃效果。当虚拟球被抓住后,它就变成了手掌对象的子节点。,手掌的父节点表示根据用户穿戴的跟踪器

3、数据实现各种变换。,5,WorldToolKit(WTK),Geometries(几何),Nodes(节点),Viewpionts(视点),WTK工具包的类,Windows(窗口),Lights(光线),Sensors(传感器),Paths(路径),Motion links运动链,宇宙universe,WTK的一个场景图的例子,视点,同一场景的多个视图,6,WorldToolKit(WTK),WTK的一个编程例子:,WTgeometry_newsphere();/*使用几何原语*/ WTgeometry_newcone(); WTgeometry_begin();/*自定义几何*/ WTpol

4、y_addvertex(); WTgeometry_save(); WTgeometrynode_load(hand); WTtexture_load(filename);/*导入纹理*/ WTtexture_setfilter();/*操纵纹理*/ WTpoly_settexturestyle();/*纹理的透明度处理或融合*/,7,WorldToolKit(WTK),WTK构建场景图的编程例子:,/*-加载手模型几何体-*/ Palm=WTmovnode_load(Root,Palm.nff,1.0);/*根节点*/ ThumbDistal=WTmovnode_load(ThumbProx

5、imal,ThumbDistal.nff,1.0); IndexProximal=WTmovnode_load(Palm,indexProximal.nff,1.0); IndexMiddle=WTmovnode_load(indexproximal,indexProximal.nff,1.0); /*-构建场景图-*/ WTmovnode_attach(Palm,ThumbProximal); /*拇指与手掌连接*/ WTmovnode_attach(ThumbProximal,ThumbDistal);/*拇指根部和拇指末端连接*/ WTmovnode_attach(Palm,IndexP

6、roximal);/*手掌和食指根部*/ WTmovnode_attach(indexProximal,indexMiddle);/*食指根部和食指中部*/ ,8,WorldToolKit(WTK),WTK构建的一只虚拟手的场景图,9,WorldToolKit(WTK),WTK的仿真过程: 初始化:WTuniversenew() 加载:WTuniverseload(filename) 进入仿真循环:WTuniversego() 中止整个程序:WTuniversestop(),WTuniversesetaction(),传感器对象:WTsensor_new() 创建过程: WTsensor *p

7、olhemus,*ball; Ball=WTspaceball_new(SERIAL2);/*把跟踪球Space ball附着在串口2上*/,视点对象:任何时刻,宇宙只有一个活跃视点,可以通过函数WTuniversegetviewpoint()访问。,10,WorldToolKit(WTK),WTK传感器的控制例子:,Main() WTsensor *polhemus,*ball; WTnode *root,*scene;/*根节点和场景节点或视点节点*/ WTuniverse_new(WTDISPLAY_DEFAULT,WTWINDOW_DEFAULT) Root=WTuniverse_ge

8、trootnodes();/*加载场景并连接到根节点*/ Scene=WTnode_load(root,myuniverse,1.0) Polhemus=WTpolhemus_new(SERIAL1);/*把polhemus跟踪器附在串口1上*/ Ball=WTspaceball_new(SERIAL2); WTviewpoint_addressor(WTuniverse_getviewpoint(),polhemus);/*把仿真视图附着在控制它的跟踪器polhemus上*/ WTviewpoint_addressor(WTuniverse_getviewpoint(),spaceball)

9、; WTuniverse_ready();/*开始仿真*/ WTuniverse_go(); WTuniverse_delete(); Return 0;,11,WorldToolKit(WTK),WTK网络开发,两层客户/服务器结构,通过World2World扩展库实现的,位于UDP互联协议的上层。,只有锁定一个共享的对象组的客户,才容许改变对象的属性,12,JAVA 3D,几何建模: Point3f myCoords= New Point3f 0.0f,0.0f,0.0f /*创建三维定点坐标列表*/ Vector3f myNormals= New Vector3f 0.0f,0.0f,0

10、.0f /*创建定点法向量列表*/ /*创建三角形数组*/ TriangleArray myTris=new TriangleArarry( myCoords.length,GeometryArray.COORDINATES |GeometryArray.NORMALS); myTris.setCoordinates(0,myCoords); myTris.setNormals(0,myNormals); /*-组合形状-*/ Shape3D myShape=new Shape3D(myTris,myAppear);,具有与平台无关的优势,13,JAVA 3D,外观: /*加载文件到场景图中*

11、/ Scene SC=loader.load(Hand.wrl); BranchGroup Bg=Sc.getSceneGroup(); /*访问被加载模型的手指部分*/ Thumb=Bg.getChild(0);index=Bg.getchild(1);, /*-对象的外观-*/ Mat=new Material(); Mat.setDiffuseColor(r,g,b) Texld=new textureLoader(checkered.jpg) Tex=Texld.getTexure(); Appr=new Apperarance(); Appr.setMaterial(Mat);App

12、r.setTexture(Tex); Geom.setAppearance(Appr);,14,JAVA 3D,JAVA 3D场景图,场景节点,只有链接到Local节点的分支才是活跃的,才可在场景中绘制,组节点,组结点:定义了一个子图,将分支中的元素组合在一起。,TransformGroup节点确定叶节点的位置和方向。,Viewplatform对象:定义虚拟世界中虚拟相机的位置和方向。,View对象,View对象:在来自仿真器输入设备的输入和到图形和声音显示设备的输出之间建立联系。含一个或者多个Canvas 3D对象,Canvas 3D对象:用于选择进行显示的屏幕区域。,PhysicalBod

13、y对象:定义用户的特征。,PhysicalEnvironment对象:描述了仿真中使用的图形显示设备的类型(CRT,立体头盔显示器),15,JAVA 3D,虚拟手的例子: /*加载VRML中的几何信息,并放在Group中*/ Palm=loader.laod(Palm.wrl).getSceneGroup(); ThumbProximal=loader.load(ThumbProximal.wrl).getSCeneGroup(); /*创建虚拟手层次*/ Palm.addchild(ThumbProximal); ThumbProximal.addchild(ThumbDistal); Pa

14、lm.addchild(indexProximal); indexProximal.addchild(indexMiddle); indexMilddle.addchild(indexDistal); ,16,JAVA 3D,Java 3D强调的是通用性:平台无关性和高级图形API的通用性。可以从真实设备中读取数据,又能从虚拟设备中读取数据。,IputDevice对象,SensorRead对象,View对象,在来自仿真器输入设备的输入和到图形和声音显示设备的输出之间建立联系。描述显示设备类型、屏幕区域、用户和跟踪器位置、用户特征等。,Java 3D场景图,ViewPlatform节点,提供虚拟

15、世界的观察模式。,调度范围,用户指定的包围对象和行为包围体。,17,JAVA 3D,网络开发:虚拟现实传输协议(virtual reality transfer protocol) 简称VRTP。,JAVA 3D和WTK的性能比较,通用触觉开放软件工具包,WTK和Java 3D工具包主要支持图形反馈和三维声音反馈。通用触觉开放软件工具包(General Haptics Open Software Tookit,简称GHOST),VR引擎单独处理图形绘制流水线和触觉绘制流水线。触觉循环包括一个单独的场景图。根据PHANToM司服循环的要求,每秒便利1000次。,GHOST与图形流水线的集成,18

16、,GHOST触觉场景图,Abstract node(抽象节点),Geometry Nodes(几何节点),Dynamic Property node(动态属性节点),GHOST工具包的C+类,Haptic Interface Device node(触觉接口设备节点),Effect Node(效果节点),Manipulator node(操纵节点),PHANToM Dynamic node(PHANToM 动态节点),Scene class(场景类),Data Types(数据类型),19,GHOST触觉场景图,机器人的GHOST场景图,20,GHOST代码例子: include #inclu

17、de #include #include #include #include Main() gstScene *scene=new gstScene; /*管理触觉场景和仿真*/ gstSeparator *root=new gstSeparator; /*分离节点*/ gstSphere *sphere=new gstSphere;/*几何节点类*/ Sphere-setRadius(20); /*下面是触点接口节点类*/ gstPHANToM *phantom=new gstPHANToM(PHANToM name); Root-addChild(phantom); Root-addChi

18、ld(sphere); Scene-setRoot(root); Scene-startSevoloop();/*执行触觉循环*/ While(!scene-getDoneServoloop() /*通过调用scene-stopServoloop()结束应用程序*/,21,图形和PHANToM校正,虚拟相机观察锥体到PHANToM工作范围的映射,缩放使得触点压力也被缩放,因此gstShape节点的物理属性(柔性和阻尼)同样需要缩放,以维持逼真度。,22,PeopleShop API 是建立在OpenGL或Direct3D基础上的一个C/C+可链接对象库,与WTK、JAVA 3D以及VRML不同,PeopleShop允许任务级别的编程。提供图形编程环境,可以简单地通过使用计算机鼠标、从角色菜单、动作菜单和仿真模式菜单中进行选择来创建仿真,不需要具体的编程。,PeopleShop,PeopleShop的角色类型和外观,角色路径和动作键,23,六、本章小结,本章介绍了一些VR工具包,可以简化VR的编程工作。例如:WTK支持各种高端I/O设备,VRML支持低端I/O设备。JAVA 3D是功能强大的通用编程工具。另外,还有专用工具包,例如:GHOST用于触觉仿真。和PeopleShop用于基于情景的训练仿真。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报