基于VRML的三维虚拟校园的设计与实现(1)
2014-11-17 01:00
导读:计算机应用论文论文,基于VRML的三维虚拟校园的设计与实现(1)怎么写,格式要求,写法技巧,科教论文网展示的这篇文章是很好的参考:
摘 要 VRML是可以用来创作桌面虚拟现实系统的建模语言。本文在
摘 要 VRML是可以用来创作桌面虚拟现实系统的建模语言。本文在介绍了VRML的基础上,以南通大学三维虚拟校园为例,讨论了虚拟场景的构建技术,介绍了一些常用的建模的方法。 关键词 虚拟现实;VRML;虚拟校园0 引言 VRML(Virtual Reality Modeling Language),是一种用于描述交互式三维空间的虚拟现实建模语言。借助VRML,可以建造虚拟的房间、建筑物、城市甚至星球等现实中的和想象中的事物;可以编写小程序来控制虚拟空间,赋予浏览者和虚拟空间进行交互的能力。 VRML制作的三维空间是以文本文件的形式保存的,由已安装过插件的浏览器来解释展示。文件短小的特点使之能够很方便的在网络上进行传输。因此,这一语言为软件实现网上的虚拟现实系统提供了重要途径。构建网络上的三维虚拟校园就是VRML的一个有效应用。1 VRML要点 VRML是解释展示的,浏览器就是其解释器。为了使IE浏览器能够支持VRML,需要安装相应插件。一种比较流行的插件是Intervista公司的World View,另有一种是SGI(Silicon Graphics Inc)公司的Cosmo Player。 VRML使用场景图数据结构来建立3D实境,这是以SGI的Open Inventor 3D工具包为基础的一种数据格式,其基本单元被称为节点,场景图规定了节点之间的等级关系与嵌套关系。VRML总共定义有54个节点,它大致可以分为如下几类: ● 造型节点:用于表示各种基本的几何体和用于任意几何体的线框图和面框图。 ● 属性节点:用于定义相关对象的颜色、材质、纹理以及摄像机组、灯光组、视点、背景等。 ● 组节点:用于将节点分组,把相关节点组合成为同一个对象。 ● 感应节点:用于感知用户的输入或动作,以触发相应的动作。 ● 其它节点:包括移动和旋转动作,脚本(Script)节点、超链接节点等。 每个具体节点都包含有一个或多个域(Field),VRML对域名、域值类型以及缺省值都有规定。下面就是一个造型(Shape)节点的结构。 Shape{ appearance NULL //exposed SFNode geometry NULL //exposed SFNode} 这个节点包含2个域:appearance域用于指定节点的外观,;geometry域用于指定造型的3D构造或几何构造,缺省的NULL值表示没有几何结构。 VRML 使用符合右手规则的三维坐标系统,原点在屏幕中心,它也是使用这一坐标系统的各种几何体的中心。所以,当根据构图要求,某个几何体的中心不在屏幕中心时,就需要移动坐标系统,即使用Transform节点,在该节点内定义的几何体都使用该节点中所定义的平移后的坐标系统。 最后,在场景图结构中需要提及的Group节点,即组节点。由于VRML只提供最基本的几何体,因而,要表现一个三维对象或场景,设计者只能通过组合这些基本几何体来实现。Group节点为这种组合提供了支持。 VRML规定使用“#”来标记注释。2 南通大学三维虚拟校园设计 使用VRML,可以构建基于网络的三维虚拟校园,下面就以南通大学三维虚拟校园为例,进行讨论。2.1 构建南通大学三维虚拟校园的目的 虚拟的南通大学校园是一个规模较大的三维场景,旨在通过网络展示南通大学的校园风貌。游览者可以走进校园,观赏校园的自然风貌,领略校园的生活氛围,在虚拟旅游中了解通大。 为了较真实的反映校园的风貌,可以通过两个方面来表现这个虚拟境界: 第一,要根据南通大学实际的景观风貌对校园内的各个场景进行建模。这些场景包括道路、楼宇、校门、花草树木及其它一些建筑物。通过对这些场景的建模构建出虚拟的南通大学校园。并且有一定的交互能力,例如游览者可以进行门、窗的开关。 第二,通过声音、文字、图片等多媒体技术手段辅助性的介绍南通大学的概况、历史等情况,从而实现介绍南通大学的目的。2.2 虚拟校园的场景结构 考虑到整个场景中的各个对象是通过空间相对位置的关系组织在一起的,因此我们先建立一个对象,然后将它作为参考来放置其它的对象。 经过分析,我们首先建立整个校园的主干道。主干道在整个校园中起到基线的作用。这然后以这条道路作为参照,把独立构建的各个楼群、校门、花草树木及其它场景组合安放在相应的位置。完整的南通大学三维虚拟校园如图1所示。

图1 南通大学三维虚拟校园结构3 南通大学三维虚拟校园实现3.1 校园背景 为了更逼真的表现出虚拟现实所描述的环境,需要给虚拟校园设置背景。建立的虚拟校园处于大地中心。背景可以通过Background节点实现。具体代码如下: Background { skyColor [0 0 0] frontUrl "tian.jpg"