sissizhang
论坛版主
论坛版主
  • 注册日期2003-09-25
  • 发帖数79
  • QQ
  • 铜币452枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2648回复:2

[转帖]VRML的核心概念与体系结构

楼主#
更多 发布于:2004-07-08 14:14
<P>    VRML是一项包含很多新概念的技术,所采用的体系结构对很多人来说都是比较陌生的。本文介绍VRML的核心概念,根据体系结构梳理成一个整体,并澄清了部分标准中不明确的概念。
    VRML定义了一种把3D图形和多媒体集成在一起的文件格式。从语法角度看,VRML文件是显式地定义和组织起来的3D多媒体对象集合;从语义角度看,VRML文件描述的是基于时间的交互式3D多媒体信息的抽象功能行为。VRML文件描述的基于时间的3D空间称为虚拟境界(Virtual World),简称境界,所包含的图形对象和听觉对象可通过多种机制动态修改。境界中的对象及其属性用节点(Node)描述,节点按照一定规则构成场景图(Scene Grap h)。场景图中的第一类节点用于从视觉和听觉角度表现对象,它们按照层次体系组织起来,反映了境界的空间结构。另一类节点参与事件产生和路由机制,形成路由图(Route Graph),确定境界随时间的推移如何动态变化。
  
   节点
    节点是构成场景图的基本单元。每个节点都有以下特征:类型、域、事件、实现、名字。
    节点可以命名(DEF语句),命名后可用USE语句引用,从而达到共享的目的。每个节点都属于某种类型,例如Sphere(球体)、Color(颜色)、Group(编组)、Sound (声音)、PointLight(点光源)。
    节点类型有零个或多个域(Field),同类型的节点根据域值不同而不同。域值和节点一起存放在VRML文件中。境界中所有节点的域值描述了境界的当前状态。
    节点类型可能包含一套可以接收和发送的事件(Event)。
事件入口
   是节点接收事件的逻辑接收器。从事件入口进入的事件称为入事件。在VRML中,事件入口和入事件表达的是同一件事,称为EventIn。入事件将导致节点状态的改变。
事件出口
   是节点产生事件的逻辑输出端。从事件出口送出的事件称为出事件,出事件和事件出口都称为EventOut。节点利用出事件报告自身的状态变化。外露域(Exposed Field)是域、入事件和出事件的统一体,它既作为域描述节点,又作为事件入口接收事件,还能把变化的值作为出事件送往其他节点。
    所以,节点是由多个域、入事件、出事件和外露域组成的。简言之,节点是由域和事件组成的。
    域和事件也有类型。ISO/IEC 14772-1定义了20种基本数据类型,这些类型既可用于域,也可用于事件。域/事件类型分为两类,其中单值域/事件包含单个值(可以是单个数值、单个向量甚至单幅图像),以SF打头;多值域/事件包含多个值组成的列表,以 MF打头。域/事件类型包括:单值布尔型、颜色、浮点值、图像、32位整数、节点、旋转值、字符串、时间、2D矢量和3D矢量。
    节点实现包括以下内容:对接收的入事件作何反应、何时产生出事件以及节点在虚拟世界中的视觉和听觉外观(若有的话)。内部节点的行为是按照VRML标准规定的节点语义并由VRML浏览器提供。
场景图的层次结构
    场景图是一种有向无环图,其中有些节点有节点域,从而能够包含其他节点。若图中从A到B有一条弧,则意味着节点A有一个节点域,且此域值直接包含节点B。上层节点称为下面各层节点的祖先;下层节点称为上层所有节点的后代。如果某节点是它自己的祖先,即形成了环形结构,则会导致不确定的结果。
    场景图不是树形结构,因为同一后代节点可以有两个紧邻的上层节点,这里我们不将其表述为"同时具有两个父亲",因为"父亲"和"儿子"在场景图中有特定含义。节点若利用DEF语句给定了名字,则可以在后面的文件中利用USE语句引用它。利用USE语句引用节点不生成该节点的副本(即不复制),而是把同一节点再次插入场景图,这就使两个节点共用一个下层节点。
节点之间的层次关系可分为两种类型:
(1) 根据节点语义通过特定域包含特定节点而形成的层次关系。
    Shape节点的appearance域和geometry域都是SFNode类型,故Shape节点和Appearance节点之间以及Shape节点和几何节点之间都可以形成上下层关系。同样,Appearance节点和Material 节点、纹理节点、TextureTransform节点之间也可以形成上下层关系,这样Shape-Appea rance-Material就形成三层关系。注意,Shape节点的appearance域可以而且只能包含Ap pearance节点,geometry域可以包含任意几何节点,也只能包含几何节点,故这里层次关系遵循的是VRML节点的语义规则。能够被包含的下层节点类型称为辅助节点类型,共22种,包括所有几何节点、所有几何属性节点、音响剪辑节点AudioClip(仅供Sound节点包含)和字型节点FontStyle(仅供Text节点包含)。
(2) 用编组节点(Grouping Node,简称组节点)把一组子节点组织起来,从而形成父子关系。这种层次关系体现的是创作者的组织意图。例如表现人体的几何节点可以是一个组节点,它由头节点、各四肢节点和躯干节点组合而成。组节点共8种:Anchor(锚)、Bil lboard(布告牌)、Collision(碰撞)、Group(组)、Inline(内联)、LOD(细节层次)、Swi tch(开关)和Transform(变换)。它们都有一个类型为MFNode的子节点域children,包含一组子节点。除上述22种辅助节点类型之外的其他32种VRML节点都是子节点类型,它们都可以作为任意组节点的儿子。
    为了区别上述两种不同的层次关系,只有组节点才称为父节点(Parent),也称为父组节点,子节点称为儿子(Child),组节点和子节点之间的上下层关系称为父子关系。
境界坐标系与变换层系
   VRML文件中定义的及文件包含的所有对象都隐式地拥有自己的坐标系。根节点所在的坐标系称为境界坐标系(World Coordinate System)。VRML支持局部坐标系(Local Co ordinate Systems)的概念,局部坐标系在祖先坐标系中定义,与祖先坐标系之间存在着变换关系。
    境界具有一个或多个特定空间位置的根节点和后代节点构成变换层系(Transformat ion Hierarchy),变换层系是场景图的子图,坐标变换随变换层系的深入而不断累积(复合变换)。变换层系描述了虚拟世界中能够直接感觉到的部分,VRML浏览器把VRML文件呈现给用户(即境界),事实上是把变换层系呈现给用户。
    属于场景图但不受变换层系影响的节点类型包括:Interpolator(6种插补器)、Navi gationInfo(航行信息)、Script(脚本)、TimeSensor(时间检测器)和WorldInfo(境界信息)。其中只有Script节点可以有后代,并且,其后代除非同时是另一属于变换层系的节点或根节点的后代,否则它不属于变换层系。LOD或Switch节点的后代节点受变换层系的影响,即使按照设定,用户也不可感知它们的某些后代节点。
事件体系
   VRML 2.0与VRML 1.0相比,最大的改进就是增加了交互性和动态能力,这是通过事件体系实现的。节点是由域和事件组成的,其中域的取值决定了节点的取值,从而决定了境界的当前状态,事件则为节点提供了接收外界消息以及向外界发送消息的能力。节点通过事件入口接收事件,通过事件出口发出事件,一个节点的事件出口和另一节点的事件入口之间用于传递事件的通路称为路由(Route),通过路由联系起来的节点形成事件体系。事件体系是场景图除层次体系之外的另一基本组成部分,通过事件体系,事件可以蔓延传播从而引起其他节点的变化。
    产生事件的最初原因是环境变化、用户交互或时间推移,检测器节点(Sensor,或称传感器、感应器)能够检测到这种变化并发出初始事件。VRML定义了9种检测器节点类型,其中4种检测环境变化(包括时间推移),称为环境检测器,另外5种检测用户操纵指点设备(如鼠标器)的动作,称为指点设备检测器。
    事件一旦产生,就按时间顺序向路由目标节点发送,并被目标节点处理,这种处理可能改变节点状态,产生其他事件,或者修改场景图的结构,从而为境界提供了动态性。VRML定义的54种内部节点类型处理事件的方式由其自身的语义决定,其中的插补器节点是一类特殊的事件处理器,它们可以根据给定的关键帧通过内插输出任意指定时刻(从事件入口送来)的值(从事件出口送出去),利用它们可以设计关键帧动画。
    插补器提供的动态行为毕竟有限,如果要定义任意事件处理,可利用脚本节点Script 。Script节点实际上是一个外壳,它包含一组利用脚本描述语言(如Java和ECMAScript)编写的函数(或方法)。Script节点收到事件后将执行相应函数,函数能够通过常规的事件路由机制发送事件,还可以忽略这种机制,直接向Script节点指向的任意节点发送事件。脚本可以动态地增加或删除路由,从而修改事件路由的拓扑结构。
事件由事件值和时间戳组成。时间戳有两个作用。首先,它是描述事件机制时序流程的一种概念装置,虽然理想的事件模型能够按照事件的产生顺序即时处理所有事件,但实际的境界实现必然存在处理延迟以及与外部设备的异步交互,因此,通过时间戳可以确保得到确定结果。其次,时间戳也可供Script节点使用,脚本可以根据用户的动作顺序或事件之间的时间间隔来处理事件。
境界呈现与用户交互
    VRML文件的解释、执行和呈现通过浏览器实现,这与利用浏览器显示HTML文件的机制完全相同。浏览器把场景图中的形态和声音呈现给用户,这种视听觉呈现即所谓的虚拟世界(境界)。用户通过浏览器获得的视听觉效果如同从某个特定方位体验到的,境界中的这种位置和朝向称为取景器(Viewer)。
VRML境界中几何造型的视觉呈现遵循一种概念性光照模型,这种模型模仿了光的物理特性,造型的视觉效果是它的外观属性和境界中的光线共同作用的结果。为了满足实时交互的要求,VRML光照模型并不过于追求境界的逼真性。
    VRML境界中的音响播放采用椭球模式,取景器相对于音源所处的空间位置不同,所听到的声音强度也就不同。VRML支持浏览器实现空间音效,如左右立体声和3D音效。</P>
<P>从概念上讲,用户游览VRML境界时都有一个视点,它是用户观察境界的当前位置。航行(Navigation)是用户调整取景器位置和/或朝向从而改变视野的动作,是相对于当前视点进行的。通过航行,用户可以在境界中到处移动或检查某个对象。航行范型是浏览器为用户提供的航行模式,如步行、飞行、考查。飞行对于星际空间探索来说比较合适,步行适宜参观博物馆,考查方式更合适观察虚拟分子。境界创作者还可以推荐一些上佳的参观点,用户参观时可以通过浏览器从当前视点跳到这些视点。</P>
<P>与航行有关的概念包括碰撞、化身、地形随动和重力。浏览器负责检测取景器和虚拟境界中物体之间的碰撞,还负责碰撞发生时调整取景器的位置,但物体之间的碰撞在目前的VRML标准中还未指定。创作者可以根据境界特点指定取景器的尺寸和形状,从而确定以下三个参数:在认定碰撞发生之前取景器可以离对象多近;存在重力条件下化身和地面应保持多高的距离(从而实现地形随动);对象必须多低才能使取景器可以走上它而不是和它发生碰撞(从而构造楼梯一类的造型)。</P>
<P>除了航行之外,另一种用户和境界进行交互的机制就是检测器节点。它们能够检测用户和境界中几何造型交互动作(如按动开关)、用户穿越境界的动作(如进入地雷区)以及时间推移。检测器提供的这些信息通过事件体系产生视觉或听觉效果,给用户造成和境界互动的交互式体验。</P>
<P>使用VRML创建你自己的虚拟空间,你需要VRML浏览器和某种字处理器。例如Windows中IE的组件VRML2。0和记事本就可以实现了。VRML是文本文件,它向VRML浏览器发出如何为你的虚拟空间创建3D造型的指令。</P>
<P>从你的字处理开器开始,你将键入VRML指令。然后,将你的文件存成文本文件*。wrl ,最后将它装入VRML浏览器,以3D形式查看。为了向你的空间添加更多东西,返回字处理器,键入其他VRML指令,保存文件,并将它重新读回VRML浏览器。重复上述操作,将使你逐渐创建自己的虚拟空间。</P>
<P>VRML语言概述:VRML文件是虚拟空间的文本性描述,你可以用记事本编辑它。VRML文件以”.wrl”结尾,表示这是一个包含VRML空间的文件。VRML文件的组成部分:VRML包括四个部分———VRML文件头、原型、造型和脚本、路由。每个VRML文件都需要有VRML文件头。一个VRML文件头包含下列条目:注释、节点域和域值、定义的节点名、使用的节点名。</P>
<P>VRML文件头:#VRML V2.0 utf8</P>
<P>(每一个VRML文件都必须以此为开头)</P>
喜欢0 评分0
ywcfwx
路人甲
路人甲
  • 注册日期2007-11-22
  • 发帖数4
  • QQ
  • 铜币120枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2010-06-08 21:05
楼主辛苦了,总结的很详细。请问国内有没有VRML的论坛什么的啊,还有一些经典作品从哪里可以下到啊
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2004-07-09 11:02
<img src="images/post/smile/dvbbs/em07.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部