收藏 分享(赏)

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

上传人:精品资料 文档编号:10358783 上传时间:2019-11-03 格式:PPT 页数:23 大小:10.87MB
下载 相关 举报
虚拟现实课件_第6章(教师-王洪群).ppt_第1页
第1页 / 共23页
虚拟现实课件_第6章(教师-王洪群).ppt_第2页
第2页 / 共23页
虚拟现实课件_第6章(教师-王洪群).ppt_第3页
第3页 / 共23页
虚拟现实课件_第6章(教师-王洪群).ppt_第4页
第4页 / 共23页
虚拟现实课件_第6章(教师-王洪群).ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

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营业执照举报