虚拟现实教师王洪群省公共课一等奖全国赛课获奖课件.pptx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟现实 教师 王洪群省 公共课 一等奖 全国 获奖 课件
- 资源描述:
-
虚拟现实技术虚拟现实技术虚拟现实技术虚拟现实技术讲课老师:讲课老师:王洪群王洪群whq_whq_1第1页第六章第六章 VR VR编程编程工具包和场景图工具包和场景图WorldToolKitWorldToolKitJAVA 3DJAVA 3D通用触觉开放软件工具包通用触觉开放软件工具包PeopleShopPeopleShop2第2页VRVR工具包工具包一、工具包和场景图一、工具包和场景图VRVR工具包:是一个为工具包:是一个为VRVR设计可扩设计可扩展面向对象函数库。被仿真对象展面向对象函数库。被仿真对象是类一部分,能继承这些累默认是类一部分,能继承这些累默认属性,因而能够简化编程任务。属性,因而能够简化编程任务。底层图形语言:底层图形语言:OpenGLOpenGLWorldToolKitWorldToolKitJava 3DJava 3DVRMLVRML通用工具包通用工具包GHOSTGHOSTPeopleShopPeopleShop支持跟踪器、传感手套、支持跟踪器、传感手套、HMDHMD和和工作台等各种工作台等各种IOIO设备。专有设备。专有公用工具包公用工具包用于触觉编程用于触觉编程用于军事仿真用于军事仿真3第3页场景图场景图:在图形编程或触觉编程中一项创作任务就是创建场景图。它是虚:在图形编程或触觉编程中一项创作任务就是创建场景图。它是虚拟世界中全部对象(可见或者不可见)以及世界视图层次组织。拟世界中全部对象(可见或者不可见)以及世界视图层次组织。在应用程序阶段,在应用程序阶段,CPUCPU执行场景图中各个部分(子树)和虚拟相机观察体相执行场景图中各个部分(子树)和虚拟相机观察体相交测试,假如包围体与观察体相交,则它所包含全部对象送到流水线。交测试,假如包围体与观察体相交,则它所包含全部对象送到流水线。叶节点表示可见对象以及它叶节点表示可见对象以及它们属性(几何、外观和行为)们属性(几何、外观和行为),又成外部节点。,又成外部节点。内部节点:通常表示变换。内部节点:通常表示变换。用于确定他们子对象与根对用于确定他们子对象与根对象以及其它对象在空间中位象以及其它对象在空间中位置关系。置关系。在场景图中,球叶节点(包在场景图中,球叶节点(包含它几何属性和颜色属性)含它几何属性和颜色属性)是内部节点一个子节点,经是内部节点一个子节点,经过改变内部节点值,能够反过改变内部节点值,能够反应出球跳跃效果。当虚拟球应出球跳跃效果。当虚拟球被抓住后,它就变成了手掌被抓住后,它就变成了手掌对象子节点。对象子节点。手掌父节点表示依据用户穿手掌父节点表示依据用户穿戴跟踪器数据实现各种变换。戴跟踪器数据实现各种变换。4第4页WorldToolKit(WTK)WorldToolKit(WTK)Geometries(Geometries(几何几何)Nodes(Nodes(节点节点)Viewpionts(Viewpionts(视点视点)WTKWTK工具工具包类包类Windows(Windows(窗口窗口)Lights(Lights(光线光线)Sensors(Sensors(传感器传感器)Paths(Paths(路径路径)Motion linksMotion links运动链运动链宇宙宇宙universeuniverseWTKWTK一个场景图例子一个场景图例子视点视点同一场景多同一场景多个视图个视图5第5页WorldToolKit(WTK)WorldToolKit(WTK)WTKWTK一个编程例子:一个编程例子:WTgeometry_newsphere();/*WTgeometry_newsphere();/*使用几何原语使用几何原语*/*/WTgeometry_newcone();WTgeometry_newcone();WTgeometry_begin();/*WTgeometry_begin();/*自定义几何自定义几何*/*/WTpoly_addvertex();WTpoly_addvertex();WTgeometry_save();WTgeometry_save();WTgeometrynode_load(hand);WTgeometrynode_load(hand);WTtexture_load(filename);/*WTtexture_load(filename);/*导入纹理导入纹理*/*/WTtexture_setfilter();/*WTtexture_setfilter();/*操纵纹理操纵纹理*/*/WTpoly_settexturestyle();/*WTpoly_settexturestyle();/*纹理透明度处理或融合纹理透明度处理或融合*/*/6第6页WorldToolKit(WTK)WorldToolKit(WTK)WTKWTK构建场景图编程例子:构建场景图编程例子:/*-/*-加载手模型几何体加载手模型几何体-*/-*/Palm=WTmovnode_load(Root,Palm.nff,1.0);/*Palm=WTmovnode_load(Root,Palm.nff,1.0);/*根节点根节点*/*/ThumbDistal=WTmovnode_load(ThumbProximal,ThumbDistal.nff,1.0);ThumbDistal=WTmovnode_load(ThumbProximal,ThumbDistal.nff,1.0);IndexProximal=WTmovnode_load(Palm,indexProximal.nff,1.0);IndexProximal=WTmovnode_load(Palm,indexProximal.nff,1.0);IndexMiddle=WTmovnode_load(indexproximal,indexProximal.nff,1.0);IndexMiddle=WTmovnode_load(indexproximal,indexProximal.nff,1.0);/*-/*-构建场景图构建场景图-*/-*/WTmovnode_attach(Palm,ThumbProximal);/*WTmovnode_attach(Palm,ThumbProximal);/*拇指与手掌连接拇指与手掌连接*/*/WTmovnode_attach(ThumbProximal,ThumbDistal);/*WTmovnode_attach(ThumbProximal,ThumbDistal);/*拇指根部和拇指末端连接拇指根部和拇指末端连接*/*/WTmovnode_attach(Palm,IndexProximal);/*WTmovnode_attach(Palm,IndexProximal);/*手掌和食指根部手掌和食指根部*/*/WTmovnode_attach(indexProximal,indexMiddle);/*WTmovnode_attach(indexProximal,indexMiddle);/*食指根部和食指中部食指根部和食指中部*/*/7第7页WorldToolKit(WTK)WorldToolKit(WTK)WTKWTK构建一只虚拟手场景图构建一只虚拟手场景图8第8页WorldToolKit(WTK)WorldToolKit(WTK)WTKWTK仿真过程仿真过程:初始化:初始化:WTuniversenew()WTuniversenew()加载:加载:WTuniverseload(filename)WTuniverseload(filename)进入仿真循环:进入仿真循环:WTuniversego()WTuniversego()中止整个程序:中止整个程序:WTuniversestop()WTuniversestop()WTuniversesetaction(WTuniversesetaction()传感器对象传感器对象:WTsensor_new()WTsensor_new()创建过程:创建过程:WTsensor*polhemus,*ball;WTsensor*polhemus,*ball;Ball=WTspaceball_new(SERIAL2);/*Ball=WTspaceball_new(SERIAL2);/*把跟踪球把跟踪球Space ballSpace ball附着在串口附着在串口2 2上上*/*/视点对象视点对象:任何时刻,宇宙只有一个活跃视点,能够经过函数:任何时刻,宇宙只有一个活跃视点,能够经过函数WTuniversegetviewpointWTuniversegetviewpoint()()访问。访问。9第9页WorldToolKit(WTK)WorldToolKit(WTK)WTKWTK传感器控制例子:传感器控制例子:Main()Main()WTsensor*polhemus,*ball;WTsensor*polhemus,*ball;WTnode*root,*scene;/*WTnode*root,*scene;/*根节点和场景节点或视点节点根节点和场景节点或视点节点*/*/WTuniverse_new(WTDISPLAY_DEFAULT,WTWINDOW_DEFAULT)WTuniverse_new(WTDISPLAY_DEFAULT,WTWINDOW_DEFAULT)Root=WTuniverse_getrootnodes();/*Root=WTuniverse_getrootnodes();/*加载场景并连接到根节点加载场景并连接到根节点*/*/Scene=WTnode_load(root,myuniverse,1.0)Scene=WTnode_load(root,myuniverse,1.0)Polhemus=WTpolhemus_new(SERIAL1);/*Polhemus=WTpolhemus_new(SERIAL1);/*把把polhemuspolhemus跟踪器附在串口跟踪器附在串口1 1上上*/*/Ball=WTspaceball_new(SERIAL2);Ball=WTspaceball_new(SERIAL2);WTviewpoint_addressor(WTuniverse_getviewpoint(),polhemus);/*WTviewpoint_addressor(WTuniverse_getviewpoint(),polhemus);/*把仿真视图把仿真视图附着在控制它跟踪器附着在控制它跟踪器polhemuspolhemus上上*/*/WTviewpoint_addressor(WTuniverse_getviewpoint(),spaceball);WTviewpoint_addressor(WTuniverse_getviewpoint(),spaceball);WTuniverse_ready();/*WTuniverse_ready();/*开始仿真开始仿真*/*/WTuniverse_go();WTuniverse_delete();Return 0;WTuniverse_go();WTuniverse_delete();Return 0;10第10页WorldToolKit(WTK)WorldToolKit(WTK)WTKWTK网络开发网络开发两层客户两层客户/服务器结构,经过服务器结构,经过World2WorldWorld2World扩展库实现,扩展库实现,位于位于UDPUDP互联协议上层。互联协议上层。只有锁定一个共享对象组客户,才允许改变对象属性只有锁定一个共享对象组客户,才允许改变对象属性11第11页JAVA 3DJAVA 3D几何建模:几何建模:Point3f myCoords=Point3f myCoords=New Point3f 0.0f,0.0f,0.0f /*New Point3f 0.0f,0.0f,0.0f /*创建三维定点坐标列表创建三维定点坐标列表*/*/Vector3f myNormals=Vector3f myNormals=New Vector3f 0.0f,0.0f,0.0f /*New Vector3f 0.0f,0.0f,0.0f /*创建定点法向量列表创建定点法向量列表*/*/*/*创建三角形数组创建三角形数组*/*/TriangleArray myTris=new TriangleArarry(TriangleArray myTris=new TriangleArarry(myCoords.length,GeometryArray.COORDINATESmyCoords.length,GeometryArray.COORDINATES|GeometryArray.NORMALS);|GeometryArray.NORMALS);myTris.setCoordinates(0,myCoords);myTris.setCoordinates(0,myCoords);myTris.setNormals(0,myNormals);myTris.setNormals(0,myNormals);/*-/*-组合形状组合形状-*/-*/Shape3D myShape=new Shape3D(myTris,myAppear);Shape3D myShape=new Shape3D(myTris,myAppear);含有与平台无关优势含有与平台无关优势12第12页JAVA 3DJAVA 3D外观:外观:/*/*加载文件到场景图中加载文件到场景图中*/*/Scene SC=loader.load(Hand.wrl);Scene SC=loader.load(Hand.wrl);BranchGroup Bg=Sc.getSceneGroup();BranchGroup Bg=Sc.getSceneGroup();/*/*访问被加载模型手指部分访问被加载模型手指部分*/*/Thumb=Bg.getChild(0);index=Bg.getchild(1);,Thumb=Bg.getChild(0);index=Bg.getchild(1);,/*-/*-对象外观对象外观-*/-*/Mat=new Material();Mat=new Material();Mat.setDiffuseColor(r,g,b)Mat.setDiffuseColor(r,g,b)Texld=new textureLoader(checkered.jpg)Texld=new textureLoader(checkered.jpg)Tex=Texld.getTexure();Tex=Texld.getTexure();Appr=new Apperarance();Appr=new Apperarance();Appr.setMaterial(Mat);Appr.setTexture(Tex);Appr.setMaterial(Mat);Appr.setTexture(Tex);Geom.setAppearance(Appr);Geom.setAppearance(Appr);13第13页JAVA 3D JAVA 3D JAVA 3DJAVA 3D场景图场景图场景节点场景节点只有链接到只有链接到LocalLocal节点分支才是节点分支才是活跃,才可在场景中绘制活跃,才可在场景中绘制组节点组节点组结点:定义了一个子图,将组结点:定义了一个子图,将分支中元素组合在一起。分支中元素组合在一起。TransformGroupTransformGroup节点确定叶节节点确定叶节点位置和方向。点位置和方向。ViewplatformViewplatform对象:定义虚拟世对象:定义虚拟世界中虚拟相机位置和方向。界中虚拟相机位置和方向。ViewView对象对象ViewView对象:在来自仿真器输入设备输入和到图形和声音显示设备对象:在来自仿真器输入设备输入和到图形和声音显示设备输出之间建立联络。含一个或者多个输出之间建立联络。含一个或者多个Canvas 3DCanvas 3D对象对象Canvas 3DCanvas 3D对象:用于选择进行显示屏幕区域。对象:用于选择进行显示屏幕区域。PhysicalBodyPhysicalBody对象:定义用户特征。对象:定义用户特征。PhysicalEnvironmentPhysicalEnvironment对象:描述了仿真中使用图形显示设备类型对象:描述了仿真中使用图形显示设备类型(CRTCRT,立体头盔显示器),立体头盔显示器)14第14页JAVA 3DJAVA 3D虚拟手例子:虚拟手例子:/*/*加载加载VRMLVRML中几何信息,并放在中几何信息,并放在GroupGroup中中*/*/Palm=loader.laod(Palm.wrl).getSceneGroup();Palm=loader.laod(Palm.wrl).getSceneGroup();ThumbProximal=loader.load(ThumbProximal.wrl).getSCeneGroup();ThumbProximal=loader.load(ThumbProximal.wrl).getSCeneGroup();/*/*创建虚拟手层次创建虚拟手层次*/*/Palm.addchild(ThumbProximal);Palm.addchild(ThumbProximal);ThumbProximal.addchild(ThumbDistal);ThumbProximal.addchild(ThumbDistal);Palm.addchild(indexProximal);Palm.addchild(indexProximal);indexProximal.addchild(indexMiddle);indexProximal.addchild(indexMiddle);indexMilddle.addchild(indexDistal);indexMilddle.addchild(indexDistal);15第15页JAVA 3DJAVA 3DJava 3DJava 3D强调是通用性:平台无关性和高级图形强调是通用性:平台无关性和高级图形APIAPI通用性。能够从通用性。能够从真实设备中读取数据,又能从虚拟设备中读取数据。真实设备中读取数据,又能从虚拟设备中读取数据。IputDeviceIputDevice对象对象SensorReadSensorRead对象对象ViewView对象对象在来自仿真器输入设备输入和到图形和声音在来自仿真器输入设备输入和到图形和声音显示设备输出之间建立联络。描述显示设备显示设备输出之间建立联络。描述显示设备类型、屏幕区域、用户和跟踪器位置、用户类型、屏幕区域、用户和跟踪器位置、用户特征等。特征等。Java 3DJava 3D场景图场景图ViewPlatformViewPlatform节点节点提供虚拟世界观察提供虚拟世界观察模式。模式。调度范围调度范围用户指定包围对象用户指定包围对象和行为包围体。和行为包围体。16第16页JAVA 3DJAVA 3D网络开发:虚拟现实传输协议(网络开发:虚拟现实传输协议(virtual reality transfer protocolvirtual reality transfer protocol)简称简称VRTPVRTP。JAVA 3DJAVA 3D和和WTKWTK性能比较性能比较通用触觉开放软件工具包通用触觉开放软件工具包WTKWTK和和Java 3DJava 3D工具包主要支持工具包主要支持图形反馈和三维声音反馈。通图形反馈和三维声音反馈。通用触觉开放软件工具包用触觉开放软件工具包(General Haptics Open(General Haptics Open Software Tookit,Software Tookit,简称简称GHOST)GHOST)VRVR引擎单独处理图形绘制流水引擎单独处理图形绘制流水线和触觉绘制流水线。触觉循线和触觉绘制流水线。触觉循环包含一个单独场景图。依据环包含一个单独场景图。依据PHANToMPHANToM司服循环要求,每秒司服循环要求,每秒便利便利10001000次。次。GHOSTGHOST与图形流水线集成与图形流水线集成17第17页GHOSTGHOST触觉场景图触觉场景图Abstract node(Abstract node(抽象节点抽象节点)Geometry Nodes(Geometry Nodes(几何节点几何节点)Dynamic Property node(Dynamic Property node(动态属性节点动态属性节点)GHOSTGHOST工工具包具包C+C+类类Haptic Interface Device node(Haptic Interface Device node(触觉接口设备节点触觉接口设备节点)Effect Node(Effect Node(效果节点效果节点)Manipulator node(Manipulator node(操纵节点操纵节点)PHANToM Dynamic node(PHANToM Dynamic node(PHANToM PHANToM 动态节点动态节点)Scene class(Scene class(场景类场景类)Data Types(Data Types(数据类型数据类型)18第18页GHOSTGHOST触觉场景图触觉场景图机器人机器人GHOSTGHOST场景图场景图19第19页GHOSTGHOST代码例子:代码例子:include#includeinclude#include#include#include#include#include#include#include#include#includeMain()Main()gstScene*scene=new gstScene;/*gstScene*scene=new gstScene;/*管理触觉场景和仿真管理触觉场景和仿真*/*/gstSeparator*root=new gstSeparator;/*gstSeparator*root=new gstSeparator;/*分离节点分离节点*/*/gstSphere*sphere=new gstSphere;/*gstSphere*sphere=new gstSphere;/*几何节点类几何节点类*/*/Sphere-setRadius(20);/*Sphere-setRadius(20);/*下面是触点接口节点类下面是触点接口节点类*/*/gstPHANToM*phantom=new gstPHANToM(PHANToM name);gstPHANToM*phantom=new gstPHANToM(PHANToM name);Root-addChild(phantom);Root-addChild(phantom);Root-addChild(sphere);Root-addChild(sphere);Scene-setRoot(root);Scene-setRoot(root);Scene-startSevoloop();/*Scene-startSevoloop();/*执行触觉循环执行触觉循环*/*/While(!scene-getDoneServoloop()While(!scene-getDoneServoloop()/*/*经过调用经过调用scene-stopServoloop()scene-stopServoloop()结束应用程序结束应用程序*/*/20第20页图形和图形和PHANToMPHANToM校正校正虚拟相机观察锥体到虚拟相机观察锥体到PHANToMPHANToM工作范围映射工作范围映射缩放使得触点压力也被缩放,所以缩放使得触点压力也被缩放,所以gstShapegstShape节点物理属性(柔节点物理属性(柔性和阻尼)一样需要缩放,以维持逼真度。性和阻尼)一样需要缩放,以维持逼真度。21第21页PeopleShop API PeopleShop API 是建立在是建立在OpenGLOpenGL或或Direct3DDirect3D基础上一个基础上一个C/C+C/C+可链接可链接对象库,与对象库,与WTKWTK、JAVA 3DJAVA 3D以及以及VRMLVRML不一样,不一样,PeopleShopPeopleShop允许任务级别允许任务级别编程。提供图形编程环境,能够简单地经过使用计算机鼠标、从角色编程。提供图形编程环境,能够简单地经过使用计算机鼠标、从角色菜单、动作菜单和仿真模式菜单中进行选择来创建仿真,不需要详细菜单、动作菜单和仿真模式菜单中进行选择来创建仿真,不需要详细编程。编程。PeopleShopPeopleShopPeopleShopPeopleShop角色类型和外观角色类型和外观角色路径和动作键角色路径和动作键22第22页六、本章小结六、本章小结本章介绍了一些本章介绍了一些VRVR工具包,能够简化工具包,能够简化VRVR编程工作。比如:编程工作。比如:WTKWTK支持各种支持各种高端高端I/OI/O设备,设备,VRMLVRML支持低端支持低端I/OI/O设备。设备。JAVA 3DJAVA 3D是功效强大通用编程工是功效强大通用编程工具。另外,还有专用工具包,比如:具。另外,还有专用工具包,比如:GHOSTGHOST用于触觉仿真。和用于触觉仿真。和PeopleShopPeopleShop用于基于情景训练仿真。用于基于情景训练仿真。23第23页展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




虚拟现实教师王洪群省公共课一等奖全国赛课获奖课件.pptx



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/3534741.html