虚拟现实导览系统除了能实现实时交互、顺畅浏览外,还应具备场景内空间对象的信息查询功能。探讨了采用 VRML技术构建综合型虚拟实验室的一般流程、空间对象的场景数据组织、空间网格对场景的分割方法以及浏览时的场景分割与优化。以综合型虚拟实验室为例,实现了基于空间网格分割的信息双向查询,并给出了具体实现结果。
随着虚拟现实技术的发展,虚拟实验室在实验教学中得到了越来越多的应用。如何让更多的学习者了解和应用虚拟实验室,已成为虚拟实验导览系统建设中的重要环节。为了丰富和完善导览系统的功能,我们开始了综合虚拟实验室实时导览系统的研发,设计并实现了虚拟实验室实时导览系统原型。21世纪信息最具代表性和发展前景的三种新技术是多媒体、网络和虚拟现实,而这种技术的交叉点是虚拟现实建模语言VRML(Virtual Reality Modeling Language)。VRML是第二代Web上的关键技术,是一种三维场景的描述性语言,也是在Internet网上实现虚拟现实的关键性技术。其基本原理是用文本信息描述三维场景,在Internet网上传输,经由本地机上的VRML浏览器解释生成三维场景,解释生成的标准规范即是VRML规范。正是这种思想,使得在Internet上通过传输很少的数据就可浏览三维虚拟场景成为可能。可交互的实时浏览和信息查询是虚拟导览系统的基本功能。纵观现有的虚拟现实导览系统,虽然不乏优秀的范例,但均不同程度的存在着浏览的顺畅性及导览功能不强等问题,特别是场景中空间对象的信息双向查询功能,未能引起足够的关注和重视。基于二维电子地图的信息查询虽然也能实现导览功能,但距人们所期望的自然、习惯的查询方式尚有差距。一个综合型虚拟实验室系统包含众多的对象,如何有序地组织场景对象的空间数据?如何在保证绘制真实的前提下实现实时顺畅浏览?如何实现空间对象的信息双向查询?本文以综合型实验室的导览系统为范本,重点探讨中大型虚拟场景的空间网格分割、场景调度以及信息双向查询等问题。
一 总体设计
设计和开发综合型实验室导览系统,需要完成场景建模、场景优化、场景及对象的交互设置,以及场景的网上发布,可以借助Auto CAD、3DS Max、VRML等开发工具和技术来完成。其中,开发的关键环节是场景网格分割、场景数据的空间组织、交互式空间属性信息查询以及浏览时的场景调度。
二 场景组织与分割
对于大中型的虚拟场景,若用单个VRML文件来组织,则将导致文件量偏大,易造成下载时间冗长,解释绘制、漫游、交互及信息查询比较困难。在具体的创建过程中,可用编组节点创建嵌套层次、按实际空间关系组织VRML文件、使用内联节点及创建嵌套内联等方法实现对场景VRML文件的有序及合理组织以加速绘制;采用代码重用(DEF/ USE)、原型(PROTO)封装以及LOD技术以减少文件量。为了便于浏览时的场景调度、减少信息查询时的计算复杂度,采用空间网格的方法,即将场景分割为M×N的空间网格,每个空间网格的大小为:X方向,50个VRML单位;Z方向,20个VRML单位;Y方向则与摄像机的Y方向高度相同。采用相同大小的空间网格来划分场景,优点是能保证浏览器每次调入和退的场景区域大小相同。缺陷是空间网格的文件量大小不完全一样,因为每个空间网格所包含的对象数量及复杂度不同。
三 虚拟实验室的空间数据库组织
综合型虚拟实验室是一个规模较大的三维场景,导览系统的设计目标,旨在为用户提供可交互的、实时的场景漫游,以及对各个不同实验室的相关信息查询,目的是通过网络展示和宣传实验室的建设成就和整体风貌(本文以浙江师范大学现代教育技术实验中心为例)。考虑到真实反映实验中心的实际情况,对实验中心内的各个对象进行建模,包括实验大楼的外观及内部的走廊、门窗,以及实验室内部的实验台、相关实验设备、多媒体教室、演播厅等等。通过对这些对象的建模构建出虚拟实验室的框架。为了便于场景数据的调用及减少查询计算时的遍历次数,虚拟实验室空间数据库的逻辑组织结构通常根据场景对象的实际空间关系来组织有几点须加以说明:
(1)虚拟实验室主场景是指进入实验大楼门厅的场景,也是整个浏览的初始场景。
(2)特效(Effect)是指场景中的Sound节点、Light节点、Fog节点等;感知器(Sensor)是指因场景交互需要,设 计 时 安 排 在 场 景 中 的Touch Sensor、Cylinder Sensor、Time Sensor、Position Interpolator、Proximity Sensor以 及Visibility Sensor等节点。这些特效和感知器用于丰富场景的表现、实现场景的交互设定,它们与场景中由Group或Transform节点组织起来的每个楼层(包括走廊及门窗)造型、单个实验室造型,实验室内部的实验台、座椅、相关实验设备等等,共同构成了一个完整的虚拟实验室场景。
(3)“支持实验室对象的底层信息”是指与各个实验室对应的属性信息。这些信息包括实验室名称、实验室负责人、实验项目、服务对象等等。空间数据库的两个重要特征是拓扑关系和复杂对象,而拓扑关系和复杂对象的表达要求层次结构和对象嵌套,并且涉及一对多的关系。如,VRML中用于创建三维对象的造型Shape节点、Group节点、Transform节点等。这种一对多的对象嵌套关系,显然不能用关系数据模型直接表达,因为用关系方法处理空间数据效率是不高的。目前,大部分商用的虚拟现实系统都将空间数据直接用文件方式表达和管理。我们在虚拟实验室的应用开发中也采用这一方法。
四 空间对象的信息双向查询
在本系统中,我们将显示于虚拟世界中的每一个实体都看作对象,一个复杂的实体对象可抽象地分解为若干个相对简单对象,换言之,若干个相对简单的实体对象能组合成为一个更高层次的复杂对象,每一个对象都有其自身的性质和相对应的功能,以及区别于其他对象的标识(OID)。这样,系统在进行查询时,根据用户所提出的查询条件,通过OID搜索管理器搜索满足条件的对象的OID。一旦获得了某个复杂对象的OID,就等于得到了与此对象相对应实体的全部信息。三维对象的捕捉利用面向对象数据结构对空间实体对象进行三维模型重建,经过几何、投影变换、确定光照模型、纹理映射等一系列步骤后,即可实现三维透视图的显示。三维对象的捕捉是在计算机屏幕上实施的,而计算机屏幕是二维的,在二维计算机屏幕上点选图形,选取对应的空间实体对象,则是三维图形显示的逆过程。要在三维透视图上捕捉空间对象,首先要根据投影变换的原理解算鼠标所选取的屏幕点所对应空间点的空间坐标,其实质就是透视投影成像的逆过程。即从该屏幕像点出发,逆向投影光线得出对象点(第一个交点)的空间位置坐标。根据计算机三维图形学的知识,某—空间对象点P(X, Y,Z)经过几何和投影变换后显示在计算机二维屏幕上所对应的平面点 p′(x,y)除了具有平面坐标(x,y),还包含一个重要的信息,那就是深度值z_buffer,所以平面点应表示为p′(x,y,z_buffer)。只要我们获取平面点的z_buffer值和图形显示时的几何和投影变换逆矩阵,就可通过逆矩阵的作用,根据计算机屏幕坐标系上鼠标点击处的维坐标p′(x,y,z_buffer),求出对应的三维空间坐标P(X, Y, Z)。建立网格索引表在三维场景中进行信息的查询和分析,需在交互方式下,利用鼠标点击需要拣取的对象,根据三维透视投影变换关系将鼠标的屏幕坐标解算为空间坐标,从而根据坐标匹配拣取出所要查询的对象。在场景比较大、场景中数据较多时,如果遍历数据库中所有对象数据以拣取所要查询的对象,则将耗费较长时间,减慢信息查询的速度。因而查询系统需建立场景的索引表,以提高对象检索速度。在此将整个场景划分为一个m行n列的矩形格网,每一格网对应着区域检索表的一行。因为每一格网所包含的场景对象的个数是不确定的,如果区域索引表的每一行长度是固定的,则每一行设置长度过长,必然有大量的单元空置无用,造成内存空间的浪费;如果设置长度过短,当一个格网区域中的场景对象较多时就容纳不下。为了解决此矛盾,可先分配m×n个存储单元对应m行n列格网,每个存储单元存储该格网内的第一个对象的指针,而在系统读取其他对象的数据时,除了为每个对象数据分配存储空间,同时为该对象设置一个后向指针,该指针指向同一格网内的下—个对象,从而将一个格网内的所有场景对象按指针链接起来。在建立起场景对象数据的区域索引表后,如果要查询某个对象的信息,只需在一个小区域内搜索该对象,避免了遍历整个场景对象数据而造成的时间损耗。当然,索引表的建立也消耗了一定的存储空间,另外区域格网大小的划分要根据场景对象数据的具体情况而定。如果每个格网区域划分过大,则失去建立索引表的优越性;如果每个格网区域划分过小,又会出现一个较大对象占据过多格网区域的情况,造成存储空间的浪费。这里以真实的实验室作为网格的划分依据。确立空间对象外接一个复杂空间对象通常是由若干简单空间对象所构成,每个相对简单的空间对象又是由若干三角面构成的,每个三角面包含三个顶点。如果要选取场景中的空间对象,一般是根据鼠标点选的坐标与数据库中对应分块区域所有空间对象的坐标进行匹配;如果鼠标点选的坐标包含于某一空间对象的坐标点集,则认为选中的是该空间对象。由于复杂的空间对象是由相当多的三角面构成,因而构成它的顶点是非常多的,如果将每个空间对象的所有顶点都与鼠标点击坐标进行匹配,这会造成过多的计算量,从而影响对象选取和信息查询的速度。为此,我们为每个实验室对象建立空间外接盒,这种外接盒设计为一个长方体,各个面与实验室的相应各面相切。在选取空间对象时,只需判断鼠标点选的坐标是否位于实验室对象的空间外接盒内,从而决定是否选中对象。属性数据向空间数据的查询在完成场景分割和空间外接盒等工作后,就可实现属性数据向空间数据的查询了。首先,给出一定的查询条件,通过SQL查询操作在属性数据库记录中搜索出满足条件的记录,然后通过OID与空间数据库中的空间对象关联,以一定的与其他对象相区别的显示方式将这些满足条件的对象显示。属性数据到空间数据的查询过程空间数据向属性数据的查询用户通过鼠标等交互工具选取三维场景中的实体对象,通过ODBC引擎搜索空间数据库,提取所选择对象的OID,然后根据OID查找属性库中该对象的属性记录,并将该记录输出显示,使用户获得所感兴趣的信息。
五 实现结果
根据上述讨论的相关技术及方法,实现了虚拟实验室三维场景中对目标对象的实时信息双向查询。具体如下:由属性信息查询空间位置在查询输入框中选择实验室名称。
六 结束语
真三维的图形显示能给用户的感观带来全新的体验。我们所设计的虚拟实验室导览系统,除了实现视点的前进、后退、左右水平旋转、仰视、俯视,以及背景音乐开关控制等漫游的基本功能外,还实现了属性数据与空间数据之间的双向查询,使得导览系统具有更好的交互性和友善性,也使得虚拟实验室的使用变得更加简单、直观和方便。下一步的工作,将在现有工作的基础上,进一步改善浏览的顺畅性问题,使综合型虚拟实验室更好地为广大师生和不同层次的学习者服务。笔者所采用的设计和开发方法,希望能为同类实验室和学习系统的开发提供一种新的思路和启迪,籍此共同促进实验教学的改革。