第9章虚拟现实技术本章重点:本章重点在于掌握虚拟现实的基本概念、特点及应用,并通过实例了解虚拟场景的生成第9章虚拟现实技术9.1虚拟现实的基本概念9.2虚拟现实的主要研究内容9.3虚拟现实系统的基本组成9.4虚拟现实系统的特征9.5虚拟现实系统的分类9.6虚拟现实的应用实例与开发技术9.7本章小结9.1虚拟现实的基本概念虚拟现实(VirtualReality,VR),就是采用计算机技术生成一个逼真的视觉、听觉、触觉、嗅觉及味觉等虚拟的感观世界,用户可以直接用人的技能和智慧对这个生成的虚拟实体进行考察和操作。虚拟现实技术的应用前景非常广阔。在军事和航空航天的模拟和训练中起到了非常重要的作用。另外,虚拟现实技术在医疗、制造业、娱乐和教育等方面的应用也具有很大的潜力。9.2虚拟现实的主要研究内容虚拟现实的研究内容主要分以下几个方面。1.人与环境融合技术2.物体对象的仿真技术3.VR图像生成技术及高效快速生成体系图技术4.实时处理及并发处理的多维信息表示技术5.高性能的计算机图形处理硬件研究6.分布式虚拟环境和基于网络环境的虚拟现实研究人与环境融合技术(1)高分辨率立体显示器(2)方位跟踪系统(3)手势跟踪系统(4)触觉反馈系统:(5)声音定位与跟踪系统(6)本体反馈物体对象的仿真技术(1)几何仿真(2)物理仿真(3)行为仿真9.3虚拟现实系统的基本组成虚拟现实系统由五大部分组成:虚拟世界虚拟现实软件计算机输入设备输出设备虚拟世界它一般是一个包含三维模型或环境定义的数据库。虚拟环境是由计算机生成的,通过视、听、触觉等作用于用户,使之产生身临其境感觉的交互式视景仿真。虚拟环境有多种形式,它可能是某些物理环境(如建筑物、汽车、潜艇甚至像太空仓这样的物体内部)的伪真实反映,也可能是根本没有任何物理基础的某一跨国公司的地理、层次网的三维数据库,甚至可以是与股票交易有关的多维数据集虚拟现实内容(1)虚拟环境建模(2)动画制作(3)物理仿真(5)交互模式(4)碰撞检测虚拟环境建模CAD技术为虚拟现实提供了有效的建模手段。模型工具包括AutoCAD、3DS、Wavefront、Multigen、Modelgen2和ComputerVision等。这些模型可为多数虚拟现实系统利用,节省了大量的再建时间。建模工具一般提供了广泛的图形库支持。动画制作一些动画可用矩阵操作来支持移动及旋转,而摆动及弹跳运动则需要专门程序。实时计算这些物理过程会带来诸如系统延时等问题,在某些动画序列中,复杂的动作可用简单的模拟方法而不需要复杂的数学过程。这项技术要求将这些动作分解为一系列离散的关键模型并放到数据库中物理仿真在进行物理仿真时,我们必须为物体设计一些支持其某些物理行为的程序。这一方面要求很强的计算能力,同时也使系统增加了一些延时。例如,下落的物体必须赋予质量属性,必须用运动方程来计算其加速度碰撞检测在虚拟现实中,常用碰撞来模拟现实生活中的接触、抓、移动和打击等情形。虚拟现实系统的一个重要功能,就是能快速进行虚拟世界中物体间的碰撞检测。虚拟世界中的物体,是以计算机产生的几何模型形式而存在的。这样,物体就可能占有一定的空间并具有穿透性,或者以一种非现实的途径相互穿插。这些现象在现实世界中是永远不可能发生的,因为物体间总会先发生碰撞。目前有多种碰撞测试方法,其中,基于快速计算的包围球碰撞测试方法和较为精确的包围盒碰撞测试方法尤为人们所重视。交互模式为简化人机界面,人们提出了许多新方法,发明了许多新设备,以及与虚拟现实有关的新技术。由此出现了许多种交互模式。例如,特征识别单元、视觉显示单元、触摸屏、光笔、游戏杆、拇指轮、压感笔、便笺簿、数字化仪等都是与虚拟现实有关的设备和技术9.4虚拟现实系统的特征无论是哪一种虚拟现实系统,都有沉浸、交互和构想性这三个基本特征。浸入性是使使用者亲身体验虚拟环境真实直观的视图,显示系统应直接受使用者的控制,获得浸入虚拟环境的感觉。交互性9.4虚拟现实系统的特征构想性构想性是指在虚拟现实系统中,帮助人们获取知识和形成新的概念。9.5虚拟现实系统的分类简易型虚拟现实系统可以仅由一台普通的计算机组成,使用者通过键盘、鼠标便可与虚拟环境进行交互。沉浸型虚拟现实系统是比较复杂的系统。使用者必须头戴头盔、手带数据手套等传感跟踪装置,才能与虚拟世界进行交互。9.5虚拟现实系统的分类共享型虚拟现实系统共享型虚拟现实系统是利用远程网络,将异地的不同用户联结起来,共享一个虚拟空间,多个用户通过网络对同一虚拟世界进行观察和操作,达到协同工作的目的。例如,异地的医生,可以通过网络,对虚拟手术室中的病人进行外科手术。9.6虚拟现实的应用实例与开发技术9.6.1VRML9.6.2一个VRML虚拟漫游系统的设计9.6.1VRML1.VRML简介2.线性变换3.场景交互4.VRML节点9.6.1VRML简介VRML(VirtualRealityModelingLanguage)即虚拟现实建模语言,它通过创建一个虚拟场景以达到现实中的效果。VRML被广泛应用于Internet上创建虚拟三维空间,利用VRML可以随意创建任何虚拟的物体,像建筑物、城市、山脉、星体等对象。当然也可以在虚拟空间中添加声音、动画,使之更加生动,更接近现实,还可以具有与浏览者的交互性,从而实现更加接近现实生活中的网上虚拟空间。9.6.1VRML简介VRML同HTML语言一样,是一种ASCII的描述性语言,可以用文本编辑器VRML编辑。用户可选用自己喜爱的文本编辑器,如Windows下的NotePad等进行编辑由于VRML将要在网络上跨平台传输,所以需要为它定义一种文件格式。1995年,正式推出VRML1.0版本。1996年,在对1.0版本进行重大改进的基础上推出了2.0版本,其中添加了场景交互、多媒体支持、碰撞检测等功能。1997年12月,VRML作为国际标准正式发布,并于1998年1月获得ISO批准,通常称为VRML97,它是VRML2.0经编辑性修订和少量功能性调整后的结果。9.6.1VRML简介下面是一个VRML的简单例子,程序构造了一个半径为1个单位的被照亮的三维红球。例sphere.wrl#VRMLV2.0utf8Shape{appearanceAppearance{materialMaterial{emissiveColor100}}geometrySphere{radius1}}9.6.1VRML简介程序说明如下:每个VRML2.0文件必须以下面的语句作为开始:#VRMLV2.0utf8“utf8”是国际标准组织确认的一个标准,在VRML文本节点中引导语言字符。以£或#开头的文本行是注释行,直到下一个回车符为止,它将被浏览器解释所忽略。Shape是VRML的一个节点类型(Node),它有appearance和geometry两个字段(Field),分别用于定义物体的外观属性(如材质、纹理)和几何属性。appearance字段后紧跟的Appearance也是VRML的一个节点,它的内容就是该物体的外观属性。就是当定义一个节点时,总是包含一个可视的有形的结果。9.6.1VRML简介Appearance可以定义material(材质),texture(纹理)和textureTransform(纹理变换)三种属性。Material节点紧跟在material字段后面,其内容就是物体的材质属性。emissiveColor100表示球的表面材质反射100%的红光,0%的绿光和0%的蓝光。geometry字段后的Sphere节点表示物体是一个球体。radius1表示球体的半径是1个单位。9.6.1线性变换在VRML中,Transform节点是一个基本结构,它是一个常见的群组节点(Groupingnode),可以作许多物体的容器。Transform还提供了更强大的功能,在计算机图形中,无论是缩放比例、旋转或是平移,“运动”总是和变换(Transformation)紧密相连的。VRML2.0中,Transform节点将其定义的变换施加于物体。它的各字段的缺省值定义如下:Transform{center000translation000rotation0010scale111scaleOrientation0010children[]}9.6.1线性变换VRML场景图包含许多群组节点以便定义一个方便的等级来操纵场景。当然,也可以把Transform和其他节点组成群组节点(例如,在一个物体等级的内部某一层放置一个传感器,用一个事件触发它,但同时又保留着操纵整个组活动的能力)。Transform字段的值,例如转变或旋转,可以由任何Shape节点或它的子节点所继承。9.6.1场景交互VRML2.0能够支持动态的、交互式的3D场景。利用VRML2.0建立的场景,不仅可以展示其中运动的物体,而且还可以使用户跟这些物体进行交互。例如在某个场景中,门可开着,电梯在运行,出租车行驶着。更奇妙的是,用户可以将门打开或关上,选择电梯的上下按钮,或者招手叫出租车停下来。9.6.1场景交互VRML2.0采用事件机制来支持动态交互的场景。事件是包含一些数据的信息,它被用来作为事件的探测器。在VRML2.0中,每个事件包括两个部分:来源和目标,它们都是由某个节点的字段表示的。VRML2.0提供了一组描述事件探测器的节点。如TouchSensor用于描述用户输入的消息;TimeSensor用于产生定时器消息;ProximitySensor用于相应用户进入某个区域的消息;VisibilitySensor用于判断某个包围盒区域的可见性等等。探测器节点和插入器节点以及VRML与Java程序之间的通讯等等,这些内容的引入,可以使场景交互变得很复杂和符合实际。9.6.1VRML节点节点:VRML2.0节点可分成图形和非图形两类节点。图形节点包括几何类型,如Box和Sphere;属性节点,如Appearance和Material;组节点,包括Shape和Transform。这些节点共同构造了表述的场景。节点字段:VRML2.0的节点字段可以给节点分配属性,以区别同一类型的节点。9.6.2一个VRML虚拟漫游系统的设计物体造型碰撞检测场景集成9.6.2物体造型例如电脑主机的设计主要是一个长方体,为了看起来真实,我们为主机的前面贴上纹理图片,此图片在项目文件的picture目录下。贴图的代码如下:Shape{appearanceAppearance{textureImageTexture{url..\picture\host.gif}}geometryBox{size0.31.40}}9.6.2物体造型9.6.2碰撞检测Collision组节点观测观察者和组中的造型发生碰撞。语法如下:Collision{#exposedFieldMFNodechildren#exposedFieldSFVec3fbboxCenter#exposedFieldSFVec3fbboxSize#exposedFieldSFBoolcollide#exposedFieldSFNodeproxy#eventOutSFTimecollideTime#evnetInMFNodeaddChildren#eventOutMFNoderemoveChildren}9.6.2碰撞检测children域的值指定了一个包含在组中的子节点列表bboxSize域的值指定了一个约束长方体的尺寸bboxCenter域的值指定了约束长方体的中心9.6.2场景集成这需要用到Inline节点将物体模型都组合起来。语法如下:Inline{#exposedFieldMFStringurl#exposedFieldSFVec3fbboxCenter#exposedFieldSFVec3fbboxSize}url域的值用来指定一个VRML文件的URL地址列表.bboxCenter域值用来指定这个I