虚拟现实技术
主讲:杨文晖
第四章 VRML
1 VRML 简介
2 VRML编程语法基础
3 VRML基本节点编程
4 群节点创建VRML立体空间造型
5 VRML场景效果节点编程设计
6 VRML动态感知虚拟现实节点
7 VRML通用接口节点
8 VRML实例编程
1 VRML简介
虚拟现实三维立体网络程序设计语言VRML是计算
机科学的前沿技术。
作为第二代网络程序设计语言的VRML完全改变了
网络的二维平面世界,实现了真正意义上的三维立
体网络世界、动态交互与智能感知等,实现计算机
网络、多媒体及人工智能的完美结合
使人们真正感受到21世纪计算机网络世界的无穷魅
力。
VRML的发展历史
计算机技术的迅猛发展,已由初级计算、实时控
制、事务处理等迅速朝着巨型化、微型化、网络化、
智能化及多媒体化等方面发展。
计算机将人类社会带人崭新的信息时代。尤其是计
算机网络的飞速发展;使我们的地球变成了一个地
球村
早期的网络系统主要传送文字、数字等信息,但多
媒体技术在网络上的应用,使目前计算机网络无法
承受如此巨大的信息量。
为此,人们开发出信息高速公路,即宽带网络系统,
而在信息高速公路上驰骋的高速跑车就是VRML虚拟
现实建模语言系统,也就是“虚拟现实三维立体网
络程序设计语言”。
VRML(Virtusl Reality Modeling Language)是什么?
虚拟现实建模语言,是一种一种三维造型和渲染的图形描述语三维造型和渲染的图形描述语
言言,通过创建一个虚拟场景以达到现实中的效果。
VRML给网络带来了什么?
VRML支持功能大大改变了原来万维网上单调、交互性较
差的弱点,创建一个全新的可进入、可参与的三维虚拟现
实世界。
VRML的重要性?
是虚拟现实三维立体网络程序设计语言,是宽带网络、多
媒体与人工智能相融合的高科技产品,是把握未来网络、
多媒体及人工智能的关键技术。
VRML 虚拟现实建模语言用来在网络上创建逼真的
三维虚拟场景。
它改变了网络上2D 画面的状态,并能实现3D 动画
效果,特别是改变了当前网络与用户交互的局限性,
使得人机交互更加方便、灵活,使虚拟世界的真实
性、交互性和动态性得到了更充分的体现。
VRML是虚拟现实建模语言,是一种三维造型和渲
染的图形描述性语言,它把“虚拟世界”看做一个
“场景场景”,而场景中的一切都被看做“对象” (也
称为节点节点),对每一个对象的描述就构成了.文件。
发展历史
VRML的特点
虚拟现实三维立体网络程序设计语言具有4大特点。
(1) VRML具有强大的网络功能,可以通过运行VRML程序
直接接入Intemet。可以创建立体网页与网站创建立体网页与网站。
(2) 具有多媒体功能,能够实现多媒体制作实现多媒体制作,合成声音、
图像以达到影视效果。
(3) 创建三维立体造型和场景,实现更好的立体交互界面更好的立体交互界面
(4) 具有人工智能人工智能,主要体现在VRML具有感知功能。可
以利用感知传感器节点来感受用户及造型之间的动态交互
感觉。
虚拟现实三维立体网络程序设计语言VRML是第二代Web网络
程序设计语言,是21世纪主流高科技软件开发工具,
是把握未来宽带网络、多媒体及人工智能的关键技术。掌
握了虚拟现实三维立体网络程序设计语言VRML ,就掌握
了软件开发的主动权,可以在未来网络世界里驰骋翱翔。
VRML的发展前景
虚拟现实建模语言VRML设计源于虚拟现实技术。
I. 虚拟现实技术是20世纪末发展起来的涉及众多学科的
高新技术,它是集计算机、仿真、微电子、传感与测
量技术于一体的高新科技的融合。
II. 而虚拟现实建模语言VRML正是利用虚拟现实技术在计
算机中创建一种虚拟环境,通过视觉、听觉、触觉、
味觉、嗅觉及生理反映等感知器,使用户产生一种与
现实生活相同的感受,有身临其境的感觉,甚至生理
感觉,可实现用户与虚拟现实环境直接进行交互。
虚拟现实建模语言VRML涉及计算机网络、多媒体和人工智能
技术三大领域及自然科学、社会科学和哲学。
具体地讲,虚拟现实环境一般包括计算机图形学、图像处
理、模式识别、传感器、语音处理、网络技术、并行处理、
人工智能等高新技术,还涉及天文、地理、数学、物理、
化学、美学、医学、军事、生理学和心理学等领域。
计算机硬件技术、网络技术及多媒体技术硬件技术、网络技术及多媒体技术的融合与高速发展使得虚
拟现实技术获得了长足的发展,从而虚拟现实技术能在网络上得以
实现和发展。
目前网站使用的均为二维图像与动画网页,而采用虚拟现实建模语
言VRML可以在网站上设计出虚拟现实三维立体网页场景和立体景物三维立体网页场景和立体景物
利用虚拟现实技术制造出一个逼真“虚拟人”,为医学医学实习、治疗、
手术及科研做出贡献,也可应用于军事军事设计一个“模拟战场”,进
行大规模高科技军事演习,这样既可以节省大量费用,又使部队得
到了锻炼。
在航空航天航空航天发射中,也可以制造一个“模拟航天器”,模拟整个航
天器的生产、发射、运行和回收的全过程,从而可以节约大量的经
费。
虚拟现实技术还可以应用于工业、农业、商业、教学、娱乐和科研工业、农业、商业、教学、娱乐和科研
等方面
应用前景非常广阔。虚拟现实建模语言VRML是21世纪计算机网络、计算机网络、
多媒体及人工智能多媒体及人工智能为一体的最为优秀的开发工具和手段。
VRML浏览器
VRML编辑器
用记事本来编写源程序
VRMLPad专用编辑器
由ParallelGraphics公司开发的VRML开发工具
2 VRML编程语法基础
1. 介绍VRML的文件结构、文件头及注释等
VRML文件主要由节点、事件、场景、原型、
脚本及路由等组成,其中节点又由域名、域值
及域值类型组成;
2. 介绍VRML立体空间的计量单位,包括立体空间坐
标、长度单位、角度单位及立体空间的颜色等
3. 节点集
VRML基本概念
虚拟现实三维立体网络(页)程序设计语言VRML涉及
有关的基本概念和名词包括:
节点
域
事件
路由
原型
场景
脚本
它是编写VRML的基础。
什么是节点?
节点是VRML文件最基本的组成要素,是VRML文
件基本的组成部分。
节点是对客观世界中各种事物、对象、概念的
抽象描述。
VRML文件就是由许多节点之间并列或层层嵌套
而构成的
什么是事件?
每一个节点一般都有两种事件, 即一个“入
事件”和一个 “出事件”。
在多数情况下,事件只是一个要改变域值的
请求:
1. “入事件”请求节点改变自己某个域的值
2. “出事件” 则是请求别的节点改变它的某个域值。
什么是原型?
原型是用户建立的一种新的节点类型,而不是一
种“节点”。
进行了原型定义就相当于扩充了VRML的标准节
点类型集。
节点的原型是节点对其中的域、入事件和出事
件的声明,可以通过原型扩充VRML节点类型集
原型的定义
I. 可以包含在使用该原型的文件中,
II. 也可以在外部定义
III. 原型可以根据其他的VRML节点来定义,
IV. 也可以利用特定于浏览器的扩展机制来定义。
什么是物体的造型?
物体的造型,即场景图
由描述对象及其属性的节点组成。
在场景图中,一类是由节点构成的层次体系组
成;另一类是由节点事件和路由构成。
什么是脚本?
脚本是一套程序,与其他高级语言或数据库的
接口。
在VRML中可以用Script节点利用Java或JavaScript
语言编写的程序脚本来扩充VRML的功能。
脚本通常作为一个事件级联的一部分而执行,
脚本可以接受事件,处理事件中的信息,还可
以产生基于处理结果的输出事件。
什么是路由?
路由是产生事件和接受事件的节点之间的连接通道。
路由不是节点,路由说明是为了确立被指定的域的事件
之间的路径而人为设定的框架。
路由说明
1. 可以在VRML文件的顶部,
2. 也可以在文件节点的某一个域中。
3. 在VRML文件中路由说明与路径无关,它既可以在源节点之
前,也可以在目标节点之后,在一个节点中进行说明,与
该节点无任何联系。
路由的作用
是将各个不同的节点联系在一起,使虚拟空间具有更好的交互
性、立体感、动感性和灵活性。
什么是事件体系?
在场景图中,除了节点构成的层次体系结构外,还有一
个 “事件体系”。
事件体系由相互通信的节点组成由相互通信的节点组成。
在大多数的VRML节点中每一个事件都有一个输入和输出每一个事件都有一个输入和输出
接口接口。。
1. 输入接口就是能够接收事件的节点,称为eventIneventIn,即入事
件(也称事件入口);
2. 输出接口就是发送事件的节点,称为eventOuteventOut,即为出事件
(也称事件出口)。
3. 一个节点一般具有多个不同的入事件和出事件,但有一些
节点不同时具有这两种事件。
入事件和出事件通过路径相连,这就是VRML文件除节
点外的另一基本组成部分路由(ROUTE)。ROUTEROUTE语句把事语句把事
件出口和事件入口联系起来,从而构成了件出口和事件入口联系起来,从而构成了““事件体系事件体系””
。
VRML立体空间计量单位
虚拟现实建模语言(VRML)要创建立体背景空间和立
体造型空间就需要
定位
需要立体空间坐标系
相应的长度
角度单位
颜色
VRML立体空间坐标系
VRML立体空间物体造型定位依靠VRML立体空间坐
标系来实现。这些坐标轴为每个空间物体的造型定
义了一个坐标系。它包括:X轴、Y轴、Z轴
X轴、Y轴和Z轴相交的点构成了该坐标系的原点
X轴的正方向指向右边,
Y轴的正方向指向正上方,
Z轴的正方向指向前方(即浏览者),如图2-1所示。空间物
体的造型在该坐标系中的位置由相对于该坐标原点的三维
坐标来确定。
x
z
y
图2-1 空间坐标系
VRML长度单位
VRML三维立体空间长度单位是统一统一的,只有一个
单位标量,即VRML单位。
VRML单位并不是一个绝对的尺寸大小。
VRML尺寸和现实中的长度单位不具有任何可比性不具有任何可比性,
只有在VRML单位间才具有可比性
VRML单位一般比实际的长度单位要小。在实际开
发工作中,考虑到多个开发者在开发中协调统一的
工作,通常都指定一个统一的参考标准,即以实际
中的长度单位为准。
VRML角度单位
在VRML立体空间中使用的角度单位不是普通的角
度,而是通常所使用的弧度。
当在VRML使用角度单位时,先将角度单位换算成弧
度单位后,再将其编写入VRML 源程序中。常用的
角度与弧度换算表如表2‒1所示。
VRML空间立体着色
VRML三维立体空间的着色,无论是立体空间背景、
光线的颜色,还是立体空间中的各种物体,它们的
颜色都是由3种基本颜色组合而成
红、绿、蓝(RGB) 。
红、绿、蓝(RGB)3种基本颜色对应3个浮点数,
它们的域值分别在—之间。红、绿、蓝3种
颜色组成各种各样姹紫嫣红的“颜色”,如下
表所示。
VRML文件语法
VRML文件语法主要包括哪些?
VRML文件头、节点、原型、造型、脚本和路由等
是否每一个VRML文件都必须包含这6个部分?
只有VRML文件头是必需的,而其他项不一定是必需的。
他们相互之间的关系?
VRML立体空间的场景和造型是由场景和造型是由节点节点构成的,
再通再通过路由路由实现动态交互和感知实现动态交互和感知,或者使用脚本脚本文件与外文件与外
部接口进行动态交互部接口进行动态交互。
在软件开发中,根据不同的实际情况编写不同的VRML程
序,它所包含的成分也可能不同。在VRML文件中, “节
点”是VRML核心、灵魂,如果没有节点, VRML也就不存
在了。
VRML文件
VRML文件可由文本编辑器编写或由VrmPad专用编
辑器编写,其VRML文件扩展名为.wrl或.wrz,其中
使用较多的是.wrl文件。任何扩展名为.wrl文件都是
VRML文件。通过VRML浏览器可以直接运行VRML文
件。
VRML文件名全称为:***.wrl 或 ***.wrz。
VRML文件结构
VRML文件的语法结构由VRML文件头、节点、事件、
脚本和路由等组成。
“节点” 可以由一个或多个组成,也可以创建新的
节点,即原型节点。
VRML文件语法结构
#VRML utf8
#VRML文件在第一行必须有的头文件
节点名{
#VRML中各种类型“节点”
域 域值
#相应“节点”的“域”和“域值”
… …
}
Script{
#脚本Script节点
}
ROUTE
#路由:把入事件与出事件联系起来
在VRML文件结构中,突出软件工程的设计思想,使VRML文件结构设
计层次清晰结构严谨、条理清楚,使读者、用户易于理解和掌握。
VRML文件头
在每一个VRML文件中,头文件是必需的,且位于VRML文件的
第一行。
VRML 文件头语法结构定义: VRML 文件头
#VRML utf8
在VRML文件头相当于高级语言C程序中的主函数的作用,每
一个 C语言程序必须从main()开始,否则编译或解释就会出错。
VRML文件头包含4个部分,每一部分代表一定含义。
(1) 以#开头,这里#不是注释含义,而是VRML文件头的一
部分。
(2) “VRML”告述浏览器该文件是一个VRML 文件。
(3) “”告诉浏览器该VRML文件遵循VRML规范的版本
(4) “utf8”表示该浏览器 VRML 文件是一个使用国际UTF‒8 字
符集。
关于注释
VRML文件的注释部分以一个符号“#”开头,结
束于该行的末尾,当注释信息多于一行时,将
产生语法错误,因为VRML不支持多行注释信息。
浏览器在浏览VRML文件时将跳过“#”后面的所
有内容。
浏览器在浏览VRML文件时将自动忽略VRML文件
中的所有空格和空行。开发人员可根据软件开
发的结构和思想编写VRML源程序。
节点(Node)和域
VRML文件中的节点是VRML文件中最基本的单位,
是VRML精髓与核心。
每个节点包含子节点和描述节点属性的“域名”或
“域值”。在高级语言中称为变量、数组等,在数
据库中常称为字段。
单一节点语法定义:
节点名{
域名 域值 #域值类型说明
… …
}
节点由节点名、一对花括号组成,花括号内又
包括节点的域名、域值及域值类型
节点中包括“域”、“域值”或子节点。根据语法结构的
要求,节点之间可以并列或层层嵌套使用。不同作用的节
点有着不同语法结构,父节点包括“域”、 “域值”或
子节点,子节点中也包含“域”、“域值”等。
“域”分为两种:一种为“域”(field);另一种称为“
暴露域”(expose Field)。可以单值也可以多值。
“域”相当于高级语言中的普通变量;而“暴露域”相
当于C语言中的外部变量,相当于可视编程VC++语言类
中的公共变量或公共函数。
在同一“节点”中的域遵循如下规则:
同一节点中的各个域之间无先后次序之分;
节点中的各个域均有自己相应的默认值;
不同的域对应不同的域值类型。
域名:
域的标识符叫域名,在节点作用域的范围内,
域名是惟一的,也是VRML的保留字或关键字。
以下是常见的两类域名的域值类型前缀。
1. 单值类型的域名,以“SF”开始,它只包含单值。单值:可
以是一个独立的数,也可以是一个向量、颜色的几个数等,
甚至可以是一幅图像数据。
2. 还有一种多值域名以“MF”开始,它包含多个值,所以叫多
值域名。
在VRML文件中,表示多域值的方法是:
整个用方括号括起来的一系列用逗号和空格间隔开的单值;
如果一个多值域不包含任何值,则只标出方括号“[]”;
如果一个多值域,恰好只包含一个数,可以不写括号,直接
写该值。
skycolor [
]
在VRML文件中各个节点语法的各种“域值类型”详细说明:
单值域类型名用“SF”表示; 多值域名称用“MF”表示。
1.SFBool
SFBool域是一个单值布尔量,常用于开启或关闭一个节点的性
质特征。SFBool域输出事件的默认值为TRUE(真),否则为
FALSE(假)。
2.SFInt32和MFInt32
SFInt32域是单值含有32位的整数,一个SFInt32值由一个十进制
或十六进制格式(0X开头)的整数。 SFInt32域的输出事件的
初始值是0。
MFInt32域是一个多值域,由任意数量的以逗号或空格分割的
整数组成。 MFInt32域输出事件的初始值是[ ]。
其余的用表表示:
域值类型 简要说明
SFBool 开关值 值为TRUE或FALSE
SFFloat/MFFloat 单值单精度浮点值/多值单精度浮点值 有正负之
分
SFColor/MFColor 颜色值 值为3个浮点数(RGB)
SFRotation/MF 旋转值 前3个指定旋转坐标
Rotation 轴,第四个指定旋转角。
SFString/MFString 字符串
SFVec2f/MFVec2f 二维浮点矢量 2个浮点值
SFVec3f/MFVec3f 三维浮点矢量 3个浮点值
SFInt32/MFInt32 32位正整数
SFImage 图像值
SFTime 时间值 1970年1月1日开始。
SFNode/MFNode 结点值 用于表明一个属性节点
节点名的重定义和重用
意义?
减少VRML代码的编写量,对重复的造型或多个同样的造型在场景中多次
出现时,通过定义这个造型节点,然后再重复调用该节点。
定义节点名称
DEF 节点名 节点类型 { }
appearance
DEF Btexi Appearance{ ……}
引用节点
USE 节点名
USE Btexi
不能用于节点名称的单词:
DEF, EXTERNPROTO, FALSE, IS, NULL, PROTO, ROUTE TO, TRUE, USE,
eventIn eventOut, exposedField, field
节点名的使用有如下规定:
不区分大小写、不能以数字开头、不能带有非印刷的ASCII字符、不能包
括单引号、双引号、数字运算符或英镑符号
事件、路由和脚本
一个节点一般都有哪些事件?
一个“入事件eventIn”,一个“出事件eventOut”
事件的作用是什么?
入事件:请求节点改变自己的某个域的值
出事件:请求别的节点改变它的某个域值
事件的命名规则
I. 大部分入事件以set_开头,但是addCildren和
removeChildren除外
II. 大部分出事件以_changed结尾,SFBool类型的除外,它
以is开头,例如isActive
III. 如果入事件和出事件的形式为SFTime,那就不再使用
set 或者changed,例如bindTime和touchTime
路由的作用
I. 连接一个节点的入事件和出事件的节点之间的通道
II. 说明被指定域的一个事件如何从某个节点到达另一个
节点,将不同节点联系起来,使空间具有更好的交互
性、立体感、动态感和灵活性
路由在绑定节点时的注意事项
I. 两个节点的路由在没有被触发之前一直都处于休眠状
态,被触发后事件从输出接口的节点输出,通过路由
传送到输入接口节点,引发VR的某种变化
II. 入事件和出事件同样具有自己的数值类型
III. 绑定多个节点,创建复杂的路线,实现更真实的交互。
脚本的作用是什么?
节点间存在路由,事件可以通过路径在节点间
传递,脚本可以对事件与路由进行编程设计。
脚本接受事件,处理事件中的信息,产生基于
处理结果的输出事件。
VRML节点集
1. Shape模型节点
2. 纹理映射节点
3. 群节点
4. 环境、影音与视点导航效果节点
5. 规范化接口节点
6. 动态交互感知节点
7. 创建新的VRML节点
1 Shape 模型节点
几何节点
Box 盒子节点
Cone 圆锥节点
Sphere 球体节点
Cylinder 圆柱体节点
Text 文本节点
绘图节点
PointSet “点”节点
IndexedLineSet “线”节点
IndexedFaceSet “面”节点
ElvationGrid 海拔栅格节点
Extrusion 挤出造型节点
物体外观节点
Appearance外观属性节点
Material 材料节点
2 纹理映射节点
ImageTexture
图像纹理节点
MovieTexture
影像纹理节点
TextureTransform
纹理变换节点
3 群节点
1. Group
编组节点,是基本型群节点
2. Transform
坐标变换节点,死转换型群节点
3. Inline
内联节点,是引入型群节点
4. Switch
开关节点,是选择型群节点
5. Billboard
广告牌节点,是广告牌群节点
6. Anchor
锚节点,是超级链接群节点
7. LOD
细节层次节点,是分级型群节点
4 环境、影音与视点导航效果节点
Background
背景节点,是天空、大地及室内布景
Fog
雾节点,是空间大气场景的一种自然现象的描绘
PointLight
点光源节点
DirectionLight
定向光源节点
SpotLight
聚光灯光源节点
Sound
声音节点,是声音发射器节点
AudioClip
音响剪辑节点
ViewPoint
视点节点,是决定观看点的节点
NavigationInfor
视点导航信息节点,是控制浏览者功能的节点
5 规范化接口节点
WorldInfor
场景信息节点,是信息化的节点
Script
脚本节点,是程序化的节点
6 动态交互感知节点
TimeSensor
时间检测器节点,是控制时间的检测器节点
PositionInterpolator
位置插补器节点,是控制位置变换的动态节点
OrientationInterpolator
朝向插补器节点,是控制方位变换的动态节点
ScalarInterpolataor
标量插补器节点,是控制变换强度的动态节点
ColorInterplator
颜色插补器节点,是控制颜色变换的动态节点
CoordinataeInterPolatoar
坐标插补器节点,是控制坐标变换的动态节点
NormalInterPolator
法线插补器节点,是控制向量变换的动态节点
Touch Sensor
触摸节点
PlaneSensor
平面检测器节点,是平面移动型传感器节点
CylinderSensor
圆柱检测器节点,是单轴旋转型传感器节点
SphereSensor
球面检测器节点,是任意轴旋转型传感器节点
VisibilitySensor
节点,是能见度传感器节点
ProximtitySensor
节点,是亲进度传感器节点
Collision
碰撞节点
7 创建新的VRML节点
PROTO
原型节点,是创建用户新节点
EXTERNPROTO
创建用户外部定义的新节点
3 VRML基本节点编程
在VRML编程语言中, VRML文件由各种各样节点组
成,“节点”是VRML的核心,节点之间可以并列
或层层嵌套使用。
节点在VRML 文件中起着主导的作用,它贯穿于整
个VRML编程语言始终。可以说,如果没有节点,
VRML文件也就不存在了。
学好、用好、掌握好VRML编程语言的“节点”是
至关重要的,因为它是VRML编程语言的灵魂,是
VRML编程的精髓。
VRML三维立体空间造型就是由许许多多“节点”
构成并创建的。
Background立体空间背景节点编程
Background背景节点的作用?
用于定义VRML世界中天空和地面颜色及空间和天空和地面颜色及空间和
地面角地面角,在天空和地面之间,设定一幅立体空
间全景图并可以放置立体空间造型。
VRML的空间背景分类:
一类室内空间背景室内空间背景;
另一类室外空间背景室外空间背景。
设计者根据实际需要进行相应设计和布局。
室内空间背景设计
室内空间背景设置哪些呢?
包括六面体:
• frontUrl前面、backUrl后面、
1eftUrl左面、rightUrl右面,
topUrl顶部和bottomUrl底部。
六面体(立方体)组成立体
空间的原理图如图3-1所
示。
x
z
y
顶部
后面
前面
右面左面
底部
图3-1 三维立体空间坐标系之“室内空间背
景”
室外空间背景设计
VRML三维立体空间室外空间背景从不同的观测角
度可以得到不同的结果。
(1)从外太空观测地球的结果,如图3-2所示。
地
球
地面
天空 大气宇宙
空间
宇宙
空间
图3-2 宇宙空间的三维立体图
(2)从地球上观测三维立体空间的结果。
观测者从宇宙空间的三维立体图看到的结果转化
为VRML三维立体空间天地合一立体空间图(室外空
间背景),将天空分成空间角,当空间角平滑到一定
程度时,就变成一个球体空间,即太极球,如图3-3
所示。 (太空)
天空
地面
(地球)
地平线
(海平面
)
图3-3 VRML三维立体空间坐标系之“室外空间背景”
0 空间角
x 地平线(面)
0 地面角
VRML 空间背景
60
z
90
120
150
180
30
60
90
150
120
180
30
室外立体空间体现了天地浑然一体,天地合一的景
象。在天地之间只有一个地平线或海平面,划分出
天空和地面,体现了太极图的阴阳与辨证关系。在
VRML虚拟现实三维立体世界里,开发人员可以根
据你所设计的场景的需要,采用相应背景。
如果要设计室内立体空间场景,可选“室内空间背
景”进行开发设计;
如果要设计室外立体空间、宇宙空间场景,可选用
“室外空间背景”场景设计;
如果既有室内又有室外场景,可以结合两者共同开
发设计所需要的立体空间场境。
Background背景节点语法
Background背景节点用来生成VRML的背景,其生
成的背景是三维立体式的,它会带给人一种空
间立体层次感效果。我们可以设计室内和室外
三维立体空间效果,从而使设计更加生动、逼
真。
Background背景节点语法定义:
Background{
skyColor [ ] #exposedField MFColor
skyAng1e [ ] #exposedField MFFloat
groundColor [ ] #exposedField MFColor
groundAng1e [ ] #exposedField MFFloat
frontUrl [ ] #exposedField MFString
backUrl [ ] #exposedField MFString
1eftUrl [ ] #exposedField MFString
rightUrl [ ] #exposedField MFString
topUrl [ ] #exposedField MFString
bottomUrl [ ] #exposedField MFString
set_bind #evemtIn SFBool
isBound #evemtOut SFBool
}
域值类型注释:
exposedField为“暴露域”;
eventIn为入事件;
eventOut为出事件;
MFFloat域是多值单精度浮点数;
MFColor域是一个多值域,包含任意数量的RGB颜
色值;
MFString域是一个含有零个或多个字符的多值域;
SFBool域是一个单值布尔量。
1. 天空的颜色和天空角
(1) skyColor域的值指定了对立体空间背景颜色进行着色,
该域值是组合而成。其默认值为( )。
(2) skyAngle域的值指定了空间背景上需要着色的位置的空
间角(用弧度)。VRML浏览器就是在这些空间角所指位置上进
行着色的。
第一个天空颜色着色于天空背景的正上方,
第二个天空颜色着色于第一个天空角所指定的位置,
第三个天空颜色着色于第二个天空角所指定的位置。
依此类推,这样就使天空角之间的颜色慢慢过渡,形成颜色
梯度。该域值必须以升序的方式排列,默认值为空。
2.地面的颜色和地面位置空间角
(1) groundColor 域的值指定了对地面背景颜色进行着色,该域
值由一系列RGB颜色组合而成。其默认值为空。
(2) groundAngle域的值指定地面背景上需要着色的位置的空
间角(用弧度)。
第一个地面颜色着色于地面背景的正下方,
第二个地面颜色着色于第一个地面角所指定的位置,
第三个地面颜色着色于第二个地面所指定的位置,
依此类推.该域值中地面角必须以升序的方式排列,默认值为
空。
我们可以通过
对背景设定空间和地面角及空间和地面颜色来产生天空和
地面效果,
以在空间背景上添加背景图像,也可以创建城市、原野、
楼房、山脉等场景。
3.利用VRML立体空间六面体创建室内空间背景
利用frontUrl、backUrl、1eftUrl、rightUrl、topUrl和
bottomUrl这6个域分别在6个不同的立体空间添加背
景图像,形成室内立体空间景象。
可以在VRML中使用的背景图像只能是JPEG、GIF和
PNG格式文件。
事件说明
set_bind入事件(eventIn)和isBound出事件(eventOut)
用来实现VRML文件的各种背景切换。
工作过程如下:
1. 对需要设定为当前背景的Background背景节点中
set_bind入事件发送一个TRUE,则这个Background背景
节点就变成当前背景节点
2. 同时原先的背景节点的出事件isBound(eventOut)向外
发送一个FALSE值,就不再是当前背景节点了。在使
用背景变换时被用来接收事件和发送事件。
Background立体空间背景设计与编程实例
室外立体空间背景设计和编程
室内立体空间背景设计和编程
1.室外立体空间背景设计和编程实例
只对立体空间背景的“天空”着色,是单色调
的绿颜色,见效果图。
vrml 3-1
[实例3·2]只对立体空间背景的“天空”颜色及“空
间角”进行设计,产生天空中大气的各种层次的调
和颜色效果
Vrml 3-2
[实例3-3] 只对立体空间背景的地面颜色及地面角
进行设计,产生地面的各种层次的调和颜色效果
Vrml 3-3
[实例3-4]对立体空间背景的“天空”颜色和“空间
角”及立体空间背景的“地面”颜色和“地面角”
同时进行着色设计,产生“天空”与“地面”立体
空间的各种层次的调和颜色效果,产生天地合一效
果场景。
vrml 3-4
2.室内立体空间背景设计和编程实例
设计一个室内立体空间背景,包括立体空间的6
个面,即由前、后、左、右、上、下平面组成。
在VRML中允许使用的背景图像文件有JPEG、GIF
和PNG等格式的文件。
根据不同的材质和图片,显示不同的效果,现
举例加以说明。
[实例3-5]在室内立体空间背景中,采用外墙图案和
地砖图案的室内立体空间效果图
[实例3-6]在立体空间中,采用6幅图像,天空绿草地
和四周采用的4幅图片(*.jpg文件)产生的效果
vrml 3-6
基本造型
虚拟现实的基本造型有:
长方体(Box),
圆柱体(Cylinder),
圆锥体(Cone),
球体(Sphere)
这些基本造型都由相应的 专门节点直接创建
虚拟现实的基本造型
关于Shape节点
定义一个造型所具有的几何尺寸、材料、纹理和外观特性
所有VR空间里的造型均有Shape节点创建
注意区分域名、节点名的大小写
Shape节点语法:
Shape节点包括了外观和几何结构两个域。
Shape{
appearance NULL #域值类型 SFNode
geometry NULL #域值类型 SFNode
几何造型
外观造型
Shape模型节点语法结构
texture
Shape模型节点
Appearance外观节点
Box立方体节点
Cone圆锥体节点
Cylinder圆柱体节点
Sphere球体节点
Text文本造型节点
Geometry域appearance域
material TextureTransform
diffuseColor ambientIntensify
specularColor emissiveColor
shininess transparency
Appearance节点
节点语法
appearance{
material NULL #域值类型 SFNode
texture NULL #域值类型 SFNode
texture Transform NOLL #域值类型 SFNode
}
材料属性
纹理映像 二维纹理坐标变换
material 节点语法
Material {
ambientIntensity #域值类型 SFFloat
diffuseColor #域值类型 SFColor
emissiveColor #域值类型 SFColor
shininess #域值类型 SFFloat
specularColor #域值类型 SFColor
transparency #域值类型 SFFloat
}
ambientIntensity 有多少环境光被该表面反射,依赖于光源的数目,的
默认值表示对材料产生较低的环境光线效果
diffuseColor 材料的漫反射颜色,表面越接近垂直光性,被反射的漫反
射光性越多。默认值( )表示中强度的白光
emissiveColor 发光物体产生的光的颜色,默认值(,,)表示不发光
shininess 造型外观材料的亮光,取值从漫反射表面的0到高度抛光的
1,默认值为,表示适当的亮度
specularColor 物体镜面反射光线的颜色,默认值(,,) 表示镜面不
反射
transparency 物体的透明度,默认值0表示不透明
空间物体造型外观颜色设计
物体造型的外观颜色一般都由几种基本颜色组成:
RYB
红(Red) 黄(Yellow) 蓝(Blue)
CYM
兰绿(青) 黄(Yellow) 绛红(Mauve)
RGB
红(Red) 绿(Green) 蓝(Blue)
CYMK
兰绿(青)黄(Yellow) 绛红(Mauve) 黑(Black)
Shape 空间节点实例
Vrml3
-7
Box 节点语法
Box{
size #域值类型 SFVec3f } # 宽 高 深
Vrml3-8
Sphere 节点语法
Sphere{
radium #域值类型 SFFloat }
Cone节点语法
Cone{
bottomradium #域值类型 SFFloat
height #域值类型 SFFloat
side TRUE #域值类型 SFBool
bottom TRUE #域值类型 SFBool
}
Vrml3-
10
Cylinder 节点语法
Cylinder{
radium #域值类型 SFFloat
height #域值类型 SFFloat
side TRUE #域值类型 SFBool
top TRUE #域值类型 SFBool
bottom TRUE #域值类型 SFBool
}
vrml3-11
Text文本造型节点
文本造型节点Text用来在VRML空间中创建文本(文字
)造型,通常使用Shape节点的geometry域的域值。
Shape{
appearance NULL #域值类型 SFNode
geometry NULL #域值类型 SFNode
}
Shape 模型节点
Appearance外观属性节点 Text文本造型节点
Material 造型外观节点 FontStyle文本外观节点
Appearance
Geometry
Text 节点语法
Text{
string [ ] #exposedField MFString
length [ ] #exposedField MFFloat
maxExtent #exposedField SFFloat
fontStyle NULL #exposedField SFNode
}
域名和域值详解
(1)string域
域值指定了要创建的文本内容,其域值可以是
一行文本,也可以是多行文本。
这些文本均包含在双引号之内,在引号内的回车符
将被忽略,所以不能使用回车键分行。
在其域值中每一行文本串使用引号包围起来,不同
的行用逗号分开。
"VRML scene",
"How are you!"
该域值的默认值为空,即不产生文本造型。
(2)length域
用来指定文本造型的长度,是以VRML单位为计
量单位的,这里的长度指的是每一行的文本长
度。
当设定一个值后,浏览器通过改变字符尺寸或
字符间距来进行压缩或扩展,以满足设定长度
的要求。1ength域的值是和string域值一一对应的,
即一个数值控制一行文本,所以压缩或扩展其
实并不是固定数值的,它与string域值有关。
当所设定的长度大于其文本造型本来的长度时,
则扩展;反之则压缩。该域值的默认值为空列
表,即为,表示即不扩展也不压缩。
(3) maxExtendt 域值
指定了文本造型中所对应的行的最大有效长度,也是以
VRML单位为计量单位的。
该域值必须大于,对于那些长度大于所设定长度的行,
通过改变字符尺寸或字符间距来进行压缩。
该域值的默认值为,表示对文本造型的长度没有限制,
可以为任意长度。
(4)fontStyle域
用来定义文本造型的外观特征。
一般情况下其域值为fontStyle节点,
该域值的默认值为NULL,即没有定义外观特征。
使用默认的外观特征,如左对齐,从左到右,文本尺寸为
,文本间距为及默认的字体大小等。
[实例3-12]在山水画背景下,显示两行文本文字的效果图;在
文本中两行不同的文字用逗号隔开,可以设定两行不同的长
度以及设定字符串最大有效长度等
FontStyle文本外观节点
FontStyle文本外观节点
是Text文本节点的子节点,用来控制文本造型的
外观特征,通过设定FontStyle节点可以改变由
Text节点创建的文本造型的外观、字体、字形、
风格和尺寸大小,等等。
FontStyle文本外观节点只出现在Text文本节点中
的fontStyle域中,用于说明文字符号的大小、风
格、字体、文本造型的排列、文本的摆放和语
言设置等。
FontStyle文本外观节点语法结构定义
FontStyle
{
family “SERIF” # field SFString
style “PLAIN” # field SFString
size # field SFFloat
spacing # field SFFloat
justify “BEGIN” # field SFString
horizontal TRUE # field SFBool
leftToRight TRUE # field SFBool
topToBottom TRUE # field SFBool
language “ ” # field SFString
}
域名和域值详解
(1) family域
用来指定在VRML中使用的VRML字符集,这些
字符集包括“SERIF”、“SANS”和
“TYPEWRITER”。
1. “SERIF”是指serif字体,是一种变宽的字体,如
“Times Roman”字体;
2. “SANS”是指sans字体,也是一种变宽的字体,如
“Helvetica”字体;
3. “TYPEWRITER”是指typewriter字体,是一种等宽字体,
如“Coutier”字体。
这里要注意的是
在VRML浏览器中实际显示的字符集是与浏览器本身有关
的,当该域值设定为“SERIF”时,浏览器也有可能
显示New York字符集,这是由浏览器本身的设置决定
的。该域值的默认值为“SERIF ”。
(2) size域值
用来指定所显示的文本字符的高度,单位为VRML单位。改变
其高度可以进而改变文本字符的尺寸大小。该域值的默认值为
。
(3) spacing域值
用来指定所显示的文本字符的间距。当文本是水平排列时,该
间距指的是水平间距,而当文本是垂直排列时,该间距指的是
垂直间距。该域值的默认值为。
(4) style域值
用来指定所显示的文本的风格。
该域值通常包括“PLAIN”、“BOLD”、“ITALIC”和
“BOLDITALIC”,这些都是浏览器所能支持的风格。
1. “PLAIN”为常用字体,既不加粗又不倾斜;
2. “BOLD”为加粗字体;
3. “ITALIC”为倾斜字体;
4. “BOLDITALIC”为既加粗又倾斜的字体。
5. 该域值的默认值为“PLAIN”。
(5) horizontal域值
控制着文本造型的排列方式,既可以是水平排列还可以是
垂直排列。该域值的默认值为TRUE,表示文本为水平排
列;假如将horizontal域值设定为FALSE,表示两行文本造型
是垂直排列的。
(6) leftToRight域值
用来指定相邻字符在水平方向上的摆放。当leftToRight域值
为TRUE时,相邻字符沿X正方向从左到右排列;当
leftToRight域域值为FALSE时则沿X正方向从右到左排列。
(7) topToBottom域值
用来指定相邻字符在垂直方向上的摆放。当topToBottom域
值为TRUE时,相邻字符沿Y负方向从上到下排列;当
topToBottom域值为FALSE时,相邻字符沿Y正方向从下往上
排列。
(8) justify 域值
相对于X与 Y轴来说的对齐方式。如有两个选项,
第1个值为主对齐方式,第2个值为次对齐方式
可以有“FIRST”、“BEGIN”、“MIDDLE”、
“END”
默认值为“BEGIN” 、“FIRST”
(9) Language 域值
用来指定string域值中所使用的语言,比如英语
德语等。
在一副背景空间下,显示两行文本,要求是typewriter字体、
文本字符高度为,字体既加粗又倾斜,造型位于X、Y轴的
中心点
什么样的场景?
在背景画面中,显示两行垂直文本的画
面,要求是sans字体,高度为,造型
为加粗字体
将文本造型与基本造型结合,在背景画面上,增加
一个透明板,然后再与文本造型融合的场景。
PointSet“点”节点
通过前面介绍的模型节点,可否能创造出复杂多变的复杂场
景?
前面介绍了通过模型节点创建出一些简单几何造型,如球
体、立方体、圆锥体、圆柱体和文本造型等。而一个虚拟
空间的内容是丰富多彩的,仅有一些简单造型是不能满足
VRML设计需要的。因此,需要创建出更加复杂而多变的
场景和造型来满足人们对虚拟现实空间环境的渴望。这样
不仅使虚拟现实场景更加逼真,具有真实感,而且使虚拟
现实场景等同于现实生活效果。
“点”节点的作用
PointSet节点用来生成几何点,并为其定位、着色和创建复
杂造型,通常用做造型节点的geometry域,当做域值来使
用。
PointSet“点”节点语法
PointSet“点”节点语法结构如下图所示
Shape 模型节点
Appearance外观属性节点 PointSet“点”节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Color 颜色节点 Coord 坐标节点
PointSet{
color NULL #exposedField SFNode
coord NULL #exposedField SFNode
}
域值类型注释:
exposedField为暴露域;SFNode域含有一个单节
点,必须按标准节点语法写成。
域名和域值详解
(1) color域值
指定了在点集合中用于着色的颜色。通常该域
值为Color节点。
1. Color节点是PointSet节点的子节点。
2. Color节点的语法很简单,仅包含一个域color。
3. Color节点是专门用来控制物体造型的颜色节点,通
过Color节点可以控制造型各部分的颜色。
4. 如果Color节点和Material节点同时对同一造型进行着
色时,Color节点享有优先权,即按Color节点所定义
的颜色对物体造型进行着色。
Color节点的语法定义
Color{
color [ ] #exposedField MFColor
}
域值类型注释:
exposedFleld为暴露域;MFColor域是一个多值域,包含任
意数量的RGB颜色值。
域名和域值详解:
color域的值用来指定造型的颜色列表,其颜色列表中第一
种颜色用来给第一个点着色,第二种颜色用来给第二个点
着色,依次类推。
颜色列表中的颜色数至少应该和坐标列表中的坐标数相等。
该域值的默认值为NULL,即空的列表,不对点进行着色。
(2) coord域值
为一个坐标节点,该节点包含了用来进行点定位的每个点
的坐标。通常该域值为Coordinate节点。
Coord域的默认值为NULL,表示空的列表,即不创建任何
点。
Coordinate节点包含了一张坐标列表,也可只包含一个域
值point[0 0 0]。
Coordinate节点语法定义:
Coordinate{
point [ ] #exposedField MFVec3f
}
域名和域值详解:
point域提供了一张三维坐标列表,用做一个造型的立体坐
标。即X,Y,Z方向上与原点之间的距离,该域值的默认
值为空,即point [ ]。
PointSet“点”节点实例
IndexedLineSet “线”节点
线节点的作用?
该节点创建了有关线的几何造型,包括直线和折线,该节
点也常作为造型节点的Geometry域的值。
IndexedLineSet线节点是使用线来构造空间造型。
VRML中的线是虚拟世界中两个端点之间的直线。要想确
定一条直线,就必须指定这条线的起点和终点,剩下的事
由VRML浏览器解决。
同样,也可以在VRML中创建折线,多个直线构成角度在
端点连接起来就成了折线。浏览器是按点的顺序来连接直
线的,在列表前面的点先进行连接“点”节点的作用
线节点如何工作
IndexedLineSet“线”节点是将许多线集合在一起,并给每一
条线一个索引(Index)。将索引1的点坐标和索引2的点坐标
相连,索引2的点坐标与索引3的点坐标,依次类推,就形
成了一个空间折线。
IndexedLineSet“线”节点语法
IndexedLineSet“线”节点语法结构如下图所示
Shape 模型节点
Appearance外观属性节点 IndexedLineSet“线”节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Color 颜色节点 Coord 坐标节点
IndexedLineSet线节点语法定义
IndexedLineSet{
coord NULL # exposedField SFNode
coordIndex [ ] # field SFInt32
color NULL # exposedField SFNode
colorIndex [ ] # field SFInt32
colorPerVertEX TRUE # field SFBool
set_coordIndex [ ] # eventIn MFInt32
set_colorIndex [ ] # eventIn MFInt32
}
域值类型注释:
exposedField为暴露域;field为域;SFNode域含有一个单节
点,必须按标准节点语法写成;MFInt32域是一个多值32位
整数;SFBool域是一个单值布尔量。
域名和域值详解
(1) coord域的值
列出了所有构造线坐标的集合列表。该域值的默认值为
NULL,为一空列表,表示不创建任何直线。
(2) coordIndex域的值
指定了一张用来描述一条或多条折线路径的索引都指定了
coord域所提供的坐标列表中的一个坐标。
该域的值默认为空,表示不创建任何直线。
一张坐标索引表可以提供一条或多条折线路径的列表。
每一条折线的连接方式都是按坐标索引列表的索引值的顺
序从前向后排列的,直到索引表的末尾为“ -1”的索引值
为止。下一条折线是从“-1”的索引值开始的,直到索引表
的末尾的另外一个“-1”的索引值为终止。
(3)color域和colorIndex域均用来给所创建的线着色。
color域的值
指定了一个节点,
用来在线集中对直线进行着色,
该域值通常为Color节点。
colorIndex域的值
指定了一个颜色索引列表,用来指定要使用的颜色,
其域值必须大于或等于0,且为整型,
该域值的默认为空。
(4)colorPerVertex域的值
指定Color节点颜色列表中的颜色是用于每一个折线,还
是用于每一个折线的每一个坐标索引。
当该域值为TRUE时,则颜色列表中的颜色用于每一个折
线的每一个坐标索引;
当该域值为FALSE时,则表示用于每一个折线。
该域值的默认值为TRUE。
当colorPerVertex域为TRUE且colorIndex域为非空时,其颜色
索引列表中第一个颜色索引给第一个坐标索引着色,第二
种颜色索引用来给第二个坐标索引着色,依次类推。颜色
列表中的颜色数至少应该和坐标索引数相等。
当colorPerVertex域为FALSE,且colorIndex域为非空时,其颜
色索引列表中第一个颜色索引给第一条折线着色,第二种
颜色索引用来给第二条折线着色,依次类推。颜色列表中
的颜色数至少应该和折线数相等。
IndexedLineSet“线”节点实例
[实例3-18]在立体空间背景中,使用Shape模型节点
和IndexedLineSet“线”节点创建三维立体线(带箭头
的三维立体线)
[实例3-19]在立体空间背景中,使用Shape模型节点和
IndexedLineSet“线”节点创建立方体与三维坐标线,
如下图所示。(vrml 3-19)
IndexedFaceSet “面”节点
在VRML中,创建面是通过 IndexedFaceSet 节点来实
现的
可以创建以下物体
创建平面几何造型,
也可组成实体模型,
而且还可以对其进行着色。
IndexedFaceSet 节点通常作为造型节点的geometry
域的值。
IndexedFaceSet “面”节点语法
IndexedFaceSet “面”节点语法结构如下图所示。
Shape 模型节点
Appearance外观属性节点 IndexedFaceSet“面”节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Color 颜色节点 Coord 坐标节点
Normal节点 texCoord节点
IndexedFaceSet “面”节点语法定义
IndexedFaceSet{
coord NULL #域值类型 SFNode
coordIndex [ ] #域值类型 MFInt32
texcoord NULL #域值类型 SFNode
texcoordIndex [ ] #域值类型 MFInt32
color NULL #域值类型 SFNode
colorIndex [ ] #域值类型 MFInt32
colorPerVertEX TRUE #域值类型 SFBool
normal NULL #域值类型 SFNode
normalIndex [ ] #域值类型 MFInt32
normalPerVertex TRUE #域值类型 SFBool
ccw TRUE #域值类型 SFBool
solid TRUE #域值类型 SFBool
convex TRUE #域值类型 SFBool
creaseAngle #域值类型 SFFloat
set_coordIndex #输入接口 MFInt32
set_texCoordIndex #输入接口 MFInt32
set_colorIndex #输入接口 MFInt32
set_normalIndex #输入接口 MFInt32
}
域名和域值详解
(1) coord域的值
提供了一个节点,这个节点列出了用来构造面的坐标,通
常包含坐标节点。
该域的默认值为NULL,表示是一张空的列表,即
IndexedFaceSet节点不创建任何面。
(2) CoordIndex 域的域值
为一张或多张面的周界的列表,其域值都是整型的索引,
且每一个索引都对应coord域内的坐标列表中一个坐标。
该域值的默认值为空,表示没有任何平面被创建。一张坐
标索引表可以提供一张或多张面的周界的列表。每一张周
界面的连接方式都是按坐标索引列表的索引值的顺序从前
到后排列的,直到索引表的末尾为-1的索引值为止,面的
周界会通过将最后一个-1前的索引值对应的坐标点和第一
个索引值所定义的坐标点连接起来而形成闭合。下一张周
界面是从-1的索引值开始的,直到索引表的末尾的另外一
个-1的索引值为止。
(3) texCoord域的域值
包含一个TextureCoordinate节点(纹理坐标),以准确地粘贴
材质图texture到IndexedFaceSet节点所构建的虚拟对象表面。
(4) texCoordIndex域的域值
用来定义一连串索引,每个索引都对应TextureCoordinate节
点(纹理坐标)中的每组坐标值。
(5)color域的值
指定了一个节点,用来在面集中对平面进行着色。该域值
通常为Color节点。
(6)colorIndex域的值
指定了一个颜色索引列表,用来指定要使用的颜色。其域
值必须大于或等于0,且为整型。该域值的默认值为空。
IndexedFaceSet“面”节点实例
[实例3-20]在立体空间背景下,使用Shape空间物体
模型节点和IndexedFaceSet面节点设计两个交叉面,
其颜色是金色的平面效果,如图所示
[实例3-21]在蓝色背景下,使用Shape空间物体模型
节点和IndexedFaceSet面节点创建一个由8个面组成
一个立体空间造型,可根据需要设计所需要的任意
空间物体造型,如图所示。
ElevationGrid海拔栅格节点
作用
在VRML场景中,利用海拔栅格节点创建高山、沙丘及不
规则地表等空间造型。
原理
在水平平面(x – z平面)上创建栅格,再在X–Z平面栅格上任
选一点,改变这个点在Y轴方向上的高度值,当增大该值
就可形成高山,当减少该值就形成低谷。也可选择任意多
个点以改变这些点的高度,创建出崎岖不平的山峦或峡谷
等造型。
ElevationGrid节点先将某一个地表区域分割成很多网格,定
义网格的个数,再定义网格的长和宽,最后定义网格的高
度,可创建该区域所需的海拔栅格几何造型。通常作为造
型节点的geometry域的域值。
ElevationGrid海拔栅格节点语法
ElevationGrid海拔栅格节点语法结构如下图
Shape 模型节点
Appearance外观属性节点 ElevationGrid海拔栅格节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Color 颜色节点 texCoord节点
Normal节点
ElevationGrid节点语法
ElevationGrid{
xDimension 0 #域值类型 SFInt32
xSpacing #域值类型 SFFloat
zDimension 0 #域值类型 SFInt32
zSpacing #域值类型 SFFloat
height [ ] #域值类型 MFFloat
color NULL #域值类型 SFNode
colorPerVertex TRUE #域值类型 SFBool
normal NULL #域值类型 SFNode
normalPerVertex TRUE #域值类型 SFBool
texCoord NULL #域值类型 SFNode
ccw TRUE #域值类型 SFBool
solid TRUE #域值类型 SFBool
creaseAngle #域值类型 SFFloat
set_height #输出接口 MFFloat
}
域名和域值详解
(1) xDimention域和zDimention域的值
为X和Z方向上(水平面)的栅格点的数量,其域值
必须大于或等于0,而所创建的海拔栅格中点的
总体数量就是xDimentionⅩzDimention个。这两个
域的默认值均为0,表示没有栅格创建。
(2)xSpacing域和zSpacing域的值
定义了栅格中行和列间的距离。xSpacing域值为X
方向上计算的列间的距离,zSpacing域值为Z方向
上计算的行间的距离。它们的域值必须大于或
等于。其默认值为。如图3-35所示。
Y 高度
height
xDimension x轴栅格数
X
列 xSpacing
行
zSpacing
zDimension
z轴栅格数
Z
图3-35 栅格立体空间结构图
(3)height域的值
定义了海拔高度,也就是Y方向上计算的海拔。该域值中
的一个值对应一个栅格点。为了形成zDimension行,height
域值是被一行一行列出来的,并且每一行都有xDimension
个高度值。此高度值既可以是绝对高度,也可以是相对高
度。该域值的默认值为空的列表,表示不创建海拔栅格。
(4)ccw域的值
是布尔值,它是counterclockwise(逆时针)的英文缩写。该域
值指定了海拔栅格创建的表面是按顺时针方向索引,还是
按逆时针方向或者未知方向索引。当该域值为TRUE时,
则按逆时针方向索引;当该域值为FALSE时,则按顺时针
或未知方向索引。该域值的默认值为TRUE。
(5)solid域的值是布尔值
当该域值为TRUE时,表示只创建正面,不建立
反面;当为FALSE时,表示正反两面都创建。当
ccw是TRUE,solid也是TRUE时,那么只创建面向
Y轴正方向的一面;若ccw为FALSE,solid还为
TRUE时,则只会创建Y轴负方向的一面。该域值
的默认值为TRUE。
(6)creaseAngle域的值
定义了一个用弧度(radian)表示的折痕角。若该值
使用比较小的弧度,那么整个表面看起来就比
较平滑;若使用较大的角度,那么折痕就会变
得很清晰。该域值必须大于或等于。其默认
值为。
ElevationCdd海拔栅格节点实例
[实例3-22]在立体背景空间下,使用Shape模型节点
和海拔栅格节点,创建一个山脉造型,没有进行平
滑处理的效果如图3-36所示。
[实例3-23]在立体背景空间下,使用Shape模型节点
和海拔栅格节点,创建山谷立体造型,并进行平滑
处理,效果如图3-37所示。
Extrusion 挤出造型节点
在VRML中,Extrusion挤出造型节点用以创建挤出造型。
创建挤出造型过程类似工业生产制造中的一种加工的材料
的流体通过一个金属板的模型孔,按照模型孔的设计,挤
压咸为一个新的造型,这个过程就是挤出,如铁丝就是铁
水通过挤压模型挤出来的。
Extrusion挤出造型节点可视为更具变化的Cylinder圆柱体节
点。
Extrusion挤出造型节点主要由 crossSection域和spine域的域
值决定。
Extrusion挤出造型节点可以创建出用户需要的所有立体空间
造型。
它像一个加工厂,能生产出各种各样的零部件或产品。利
用Extrusion挤出造型节点可以生产和加工出VRML虚拟现实
世界中千姿百态的三维立体空间造型,因此它是VRML中
最重要,也是最有用的节点。
crossSection域控制断面形状,是一系列的二维轮廓
线,可以组成圆形、正方形、三角形、菱形及多边形等,
如图3-38所示。
spine域定义了一系列的三维路径与crossSection域定义好的
断面的几何中心沿着spine域路径创建造型。 spine域定义的路径
可以是直线路径﹑曲线路径﹑螺旋线路径及封闭路径等。
x
y
z
x
y
z
x
y
z
挤压造型的几个要素:放样图形﹑放样路径﹑放样方向
及最后形成的空间造型轮廓。
放样方向
放样路径
放样图形
造型轮廓
crossSection spine
Extrusion节点通过挤出过程创建了物体表面的几何
形状,通常作为造型节点的域值。
Extrusion挤出造型节点语法结构如下图所示。
Shape 模型节点
Appearance外观属性节点 Extrusion挤出造型节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Extrusion挤出造型节点语法定义
Extrusion{
crossSection [ , –,
–, ,
] #域值类型 MFVec2f
spine [ ,
] #域值类型 MFVec3f
scale #域值类型 MFVec2f
orientation #域值类型 MFRotation
beginCap TRUE #域值类型 SFBool
endCap TRUE #域值类型 SFBool
ccw TRUE #域值类型 SFBool
solid TRUE #域值类型 SFBool
convex TRUE #域值类型 SFBool
creaseAngle #域值类型 SFFloat
set_spine #输入接口 MFVec3f
set_crossSection #输入接口 MFVec2f
set_scale #输入接口 MFVec2f
set_orientation #输入接口 MFRotation
}
域名和域值详解
(1)crossSection域的值
定义了一系列的二维坐标,这些坐标定义了沿着挤出过程
的脊线进行挤出的一个封闭或开放的轮廓。
该值中的二维坐标第一个值为沿X轴方向上的距离,
第二个值为沿着Z轴方向上的距离。该域的默认值为一个
正方形。
(2)Spine域的值
定义了一系列的三维坐标,而这些坐标定义了一个封闭或
开放的轨迹,造型是沿着这条轨迹被拉动的,从而创建了
挤出过程。
该域值的默认值为沿着Y轴指向正;上方的直线轨迹。
(3) Scale域的值
指定了一系列挤出孔的比例因数对。每一个比例因数对的
第一个值为挤出孔指定了一个X轴方向上的缩放比例因数,
第二个值为挤出孔指定了一个Z轴方向上的缩放比例因数。
它们被使用在沿脊线的每一个坐标处。该域值必须大于或
等于,其默认值为( ),表示缩放比例在X轴方向和
Z轴方向上都为,即挤出孔的大小不变。
(4) Orientation域的值
指定了沿脊线坐标的挤出孔的旋转情况。和rotation域一样,
每一个域值都包括一个旋转轴和旋转角度。该域值的默认
值为( ),即不产生旋转。
(5) benginCap域和endCap域的值
指定了在挤出完成后,是否加顶盖和底盖。域值为TRUE
时,则利用crossSectin域中的二维坐标创建了一个盖子表
面;域值为FALSE时,则不创建盖子表面。其默认值为
TRUE。
(6) ccw域的值
指定了挤出孔是按顺时针方向的坐标来定义,还是按逆时
针的坐标来定义。当该域值为TRUE时,则按逆时针方向
定义;当该域值为FALSE时,则按顺时针定义。其默认值
为TRUE。
(7) convex域的值
表示挤出孔是否都是凸面。当该域值为TRUE时,VRML浏
览器不需要对这些面进行分割;当该域值为FALSE时,浏
览器自动将这些凹陷的挤出孔面分割为许多较小的凸面。
该域值的默认值为TRUE,表示挤出孔都是凸面,而不必
进行分割。
(8) solid域的域值
是布尔量。当该域值为TRUE时,只会创建正面,不创建
反面;当该域值为FALSE时,正反两面均创建。该域值的
默认值为TRUE。
(9) creaseAngle域的域值
指定了一个用弧度表示的折痕用的阀值。挤出
造型中两个相邻面间的夹角小于所设定的阀值,
那么这两个面的边界就会模糊,也就是进行了
平滑绘制。如果两个相邻面间的夹角大干所设
定的阀值,那么这两个面的边界就会保持原来
的样子,不再进行平滑绘制!该域值必须大于或
等于。其默认值为。
Extrusion挤出造型节点实例
[实例3-24]在立体空间背景下,利用Shape造型模型
节点和Extrusion挤出造型节点,创建出如图3-41所
示的VRML虚拟现实三维立体空间造型。
思考题
4 群节点创建VRML立体空间造型
VRML中的群节点可以创建VRML立体空间的复杂造型,可以将所有“
节点”包含其中,看做一个整体对象(造型)。
在群节点中的 “节点”可以是:
基本节点
子节点
群节点本身。
群节点的种类很多
有group编组节点、
Transform空间坐标变换节点、
Inline内联节点、
Switch开关节点、
Billboard广告海报牌节点、
Anchor锚节点、
LOD细节层次节点
Ollidion碰撞传感器节点等。
Transform空间坐标变换节点
Transform空间坐标变换节点的作用是什么?
可在VRML立体空间创建一个新的空间坐标系。
特点:
程序中的每一个Transform空间变换节点都创建一
个相对已有坐标系的新坐标系,该节点所包含
的空间物体造型都是在这个新的坐标系上建立
的。
注意:
利用Transform节点可以在VRML场景中创建多个
坐标系,而这些坐标系可随意平移、旋转和缩
放,从而使坐标系上的造型实现平移、旋转和
缩放。
Transform空间坐标变换节点语法结构如图4-1所示
Shape 模型节点
Appearance外观属性节点 几何或造型节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Transform空间坐标变换节点
addChildren Children[ ] removeChildren
作用:
Transform空间坐标变换节点与VRML基本几何造
型节点、点节点、线节点、面节点、海拔栅格
节点及挤出造型节点等联合使用可以创建复杂
立体空间造型。
归属:
Transform空间坐标变换节点是编组节点,定义一
个相对于已有坐标系的新坐标系。
该节点可以在立体空间指定一个物体造型的位
置,还可以对其进行移动、旋转和缩放等操作。
Transform空间变换节点语法定义
Transform {
children [ ] #exposedField SFNode
translation # exposedField SFVec3f
rotation # exposedField SFRotation
scale # exposedField SFVec3f
scaleOrientation # exposedField SFRotation
bboxCenter # field SFVec3f
bboxSize # field SFVec3f
center # exposedField SFVec3f
addChildren #eventIn MFNode
removeChildren #eventIn MFNode
}
域名和域值详解
(1)children域的域值
指定了多个群节点和子节点。
该域值通常包括Shape节点和其他Group节点及Transform节
点。
浏览器是逐个创建该域值中所包含的每个造型和组的,该
域值的默认值为空列表。
(2)Translation域的值
指定了在父坐标系的原点和新坐标系的原点之间x、Y、Z
方向上的距离。
该域值的第一个值为X方向上的距离,第二个值为Y方向上
的距离,第三个值为Z方向上的距离。该域值既可为正,
也可为负,只是方向相反而已。
该域值的默认值为 ( ),表示各方向的距离为0,
新坐标系和父坐标系重合。
(3) rotation域的域值
指定了一个旋转轴和旋转角度。
新坐标系是围绕该旋转轴旋转一个该域值所设定的旋转角
度,该域的前3个值为一个三维坐标的x、Y、Z分量,该三
维坐标在新坐标系上的原点和该点相连的虚线就是旋转轴。
该域值的第4个值为以弧度为计量单位的旋转角度。
其默认值为(0.0 0.01.0 0.0),表示以Z轴为旋转轴,但
不发生旋转。
(4) scale域的域值
指定了新坐标系在X、Y、Z方向上的缩放系数。
该域值的3个值分别为X、Y、Z方向的缩放系数
其默认值为( ),表示在X、Y、Z方向上没有缩放。
•制作椭球
(5) scaleOrientation域的域值
也指定了一个旋转轴和旋转角度,该域值的前3
个值为新坐标系上的X、Y、Z分量,第4个值为
以弧度为计量单位的旋转角。
但其作用与rotatlon节点不同,利用scaleOrientation
域的域值在缩放前旋转新的坐标系,缩放后再
将其旋转回来。 并不能真正地旋转坐标系。
其默认值为( )。
•制作平行六面体
(6) bboxCenter域的域值
指定了包围在该组中子节点的包围盒的中心。
其默认值为 ( )。
(7) bboxSize域的域值
指定了包围该组子节点包围盒X、Y、Z方向的尺
寸大小。
其默认值为( – –)。
(8) center域的域值
指定了一个三维坐标。该三维坐标位于新的坐
标系上,坐标系的旋转和缩放均围绕该点进行。
其默认值为( )。
空间物体造型平移
利用坐标变换节点可以实现立体空间物体造型的移
动和定位,并且可以在三维立体坐标系X、Y、Z轴
上实现任意位置的移动或定位效果。
在VRML场景中,如果有多个造型不进行移动处理,
则这些造型将在坐标原点重合,这是设计者不希望
的。使用Transform坐标变换节点可以实现VRML场
景中各个造型的有机结合,达到设计者所要设计的
理想效果。
[实例4-1]在VRML中,通过Transform坐标变换节点
创建一个相对原来坐标系在X、Y、Z 3个坐标轴上的
平移及由X、Y、Z组合的任意方向上的平移的新坐
标,如图4-2所示。
空间物体造型旋转
利用Transform坐标变换节点可以实现立体空间物体
造型的旋转,而且可以在三维立体坐标系X、Y、z
轴上实现任意位置的旋转或定位效果。
[实例4-2]
在立体空间背景下,长方体以Y轴为旋转轴旋转
了弧度,即以Y轴为中心旋转60o。也可以根
据X、Y、Z 3个旋转轴组合形成一个任意空间角
度的轴进行旋转,如图4-3所示。
空间物体造型缩放
利用Transform坐标变换节点可以实现立体空间物体造型的缩
放,而且还可以在三维立体坐标系X、Y、Z轴上实现任意位置
的缩放效果
[实例4-3]
在VRML文件中,设计一个飞碟立体空间造型,使用
Transform坐标变换节点进行缩放,可在X、Y、Z 3个轴方向
上缩放,也由X、Y、Z 3个轴组成的不同组合中进行缩放,
如图4-4所示。 (vrml 4-3飞碟.vrl)
[实例4-4]
在立体空间背景下,由坐标系变换节点构成的简
单空间立体造型,创建一个金色的哑铃立体空
间物体造型,如图4-5所示
Group编组节点
Group编组节点是将多个节点进行组合创建较复杂的立体空间
造型,利用Group编组节点的Children域可以包含任意个节点
特点:
该节点是群节点中最基本的节点。可以把Group编组节点
中所包含全部节点视为一个整体,当做一个完整的空间造
型来对待。如果利用DEF(重定义节点名)对Group编组节点
命名,则可以使用USE(重用节点)在相同的文件中重复使
用这一节点。
Group编组节点的功能是什么?
是将其包含的所有节点当做一个整体造型来看待,从而增
强程序设计的可重用性和灵活性,给VRML程序设计带来
更大的方便。
Croup编组节点语法
Group编组节点语法结构如下图(4-6)所示
Shape 模型节点
Appearance外观属性节点 几何或造型节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Group编组节点
addChildren Children[ ] removeChildren
Group 编组节点语法
Group{
children [ ] #域值类型 MFNode
bboxCenter #域值类型 SFVec3f
bboxsize – – #域值类型 SFVec3f
addChildren #输入接口 SFNode
removeChildren #输出接口 SFNode
}
域名和域值详解
(1) children域的域值
指定了包含多个群节点和子节点。该域值通常包括Shape节点和
其他Group节点,浏览器是逐个创建该域值的每个造型和组。其
默认值为空的列表。
(2) bboxCenter域的域值
指定了包围该组子节点的包围盒的中心。其默认值为(0.0 0,0
(3)bboxSize域的域值
指定了包围该组子节点的包围盒x、y 、 z方向的尺寸大小。该域
值的默认值为( )。
(4)addChildren入事件
将指定的节点加到组的子节点列表中。如果该节点已在组的子
节点列表中,该事件被忽。
(5)removeChildren出事件
将指定节点从组的子节点列表中删除。如果该节点没在组的子
节点列表中,该事件被忽略。
Croup编组节点实例
[实例4-5]使用Group编组节点编制一串糖葫芦,将圆
柱体和球体组合在一起,并且在球体的使用中利用
了节点重定义使用和坐标变换节点,使空间造型的
效果更佳,如图4-7所示。
[实例4-6]在立体空间背景下,创建一组路灯
Inline内联节点(调用节点型群节点)
在节点造型复杂的VRML中,如何体现软件工程思想?
在VRML程序设计中编写VRML源程序时,由于创建的节点造型复
杂,使VRML源程序过大或过长,给程序编写和调试带来诸多不
便,因此将一个很大的VRML源程序拆成几个小程序。
这就是软件工程的设计思想,采用结构化、模块化、层次化,
提高软件设计质量,设计出层次清晰结构合理的软件项目。
实现方法
Inline内联节点可以使VRML程序设计模块化。由基本VRML程序(模
块)组成复杂和庞大的VRML立体空间静态或动态场景。Inline嵌入
节点是一个群节点,也可以是包含在其他群节点之下的节点。
Inline内联节点还可以从其他网站中引入VRML文件(程序),可以
实现分工协作,每个人在自己的计算机上完成自己的工作,然
后把VRML文件(程序)放在网络上由一个负责人从各个网站上嵌入
VRML文件进行调试或运行,完成三维立体虚拟现实空间场景的
创建。
Inline内联节点语法
Inline内联节点语法结构如图4-9所示
Inline{url[]}
VRML 文件 VRML 文件
Inline内联节点语法
Inline{
url “” #exposedField MFString
bboxCenter 0 0 0 #field SFVec3f
bboxSize -1 –1 –1 #field SFVec3f
}
域名和域值详解
(1) url域的域值
• 是输入所要嵌入的VRML文件的路径和文件名,可以是
本地计算机或网络中远程计算机文件名和位置
(2) bboxCenter域的域值
• 是定义一个几何中心的位置。
• 如果把所有包含在群节点中的节点用一个箱型包含起来,
所定义的中心线位置就是这个箱型体的几何中心。
• 该域值的默认值为(0 0 0),与三维坐标的原点重合。
Inline内联节点实例
[实例4-7]在立体空间背景下,使用内联节点,把路
灯场景造型调入公路路灯场景畔使空间场景效果更
佳,如图4-10所示。
Switch开关节点
作用:
在VRML程序设计中,Switch开关节点可作为选择
开关使用。
该节点是一个群节点,称为选择型群节点。
在这个节点中可以创建不同的子节点,但同一
时刻只能选择一个子节点,
因此增加了VRML程序的交互性,使用户有更大
的选择权。
Switch开关节点语法
Switch开关节点语法结构如图4-11所示
Shape 模型节点
Appearance外观属性节点 几何或文本造型节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Switch开关节点
Choice[ ]
Switch开关节点语法定义
Switch{
choice [] #exposedField MFNode
whichChoice -1 #exposedField SFInt32
}
域名和域值详解
(1) choice域的域值
包含了Switch开关节点的所有子节点,
每个子节点都有一个指针,第一个子节点的指
针从0开始。
(2) whichChoice域的域值
定义了该域值是选择要执行choice域中的哪个子
节点。
其中0代表第一个子节点,1代表第2个子节点,
依次类推。
该域值的默认值为-1,表示不选择任何子节点。
Switch开关节点实例
[实例4-8]本实例要求当whichChoice域值为0时,表示
显示第一个文本内容;在显示文本造型或其他造型
时,增加了一个背景图像,如图4-12所示。
Billboard广告、警示牌、海报节点
在VRML场景中,Billboard广告、警示牌、海报节点
用来给企、事业单位、公司、部门做广告宣传,进
行路标指示、警示提示及张贴海报进行宣传等。
Billboard节点也是一个群节点,
可以在全域坐标系之下创建一个新的坐标系,选定
一个旋转轴后,这个节点下的子节点所构成的虚拟
对象的正面会永远自动地面对观众,不管观察者如
何行走或旋转等。
Billboard广告、警示牌、海报节点语法
Billboard广告、警示牌、海报节点语法结构如图4-
13所示
Transform节点
Children[ ]
Inline内联节点
Billboard广告、警示牌、海报节点
addChildren Children[ ] removeChildren
Billboard节点语法(广告警示牌海报节点)
Billboard{
children [ ] #域值类型 SFNode
axisOfRotation #域值类型 SFVec3f
bboxCenter #域值类型 SFVec3f
bboxsize – – #域值类型 SFVec3f
addChildren #输入接口 SFNode
removeChildren #输出接口 SFNode
}
域名和域值详解
(1) AxisOfrotation 域的域值
(1) 是在BillBoard节点中的局域坐标系中选定一个旋
转轴。
(2) 其中,(1 0 0)表示绕X轴旋转,(0 1 0)表示绕Y轴
旋转,(0 0 1)表示绕Z轴旋转。
(2) children域的域值
表示包含多个群节点或子节点,包含任意数量
的节点。
(3) bboxCenter域的域值
定义了一个几何中心点的位置,如果把所有包含在群节点
中的节点用箱型体包含起来,所定义的几何中心位置就是
这个箱型体的几何中心。
该域值的默认值 为(0 0 0),与三维坐标的原点重合。
(4) bboxSize域的域值
定义了几何箱型体的尺寸。第1个值是箱型体的宽,在X轴
方向;第2个值是箱型体的高,在Y轴方向;第3个值是箱
型体的深, 在z轴方向。
该域值的默认值为(-1 -1 -1),表示VRML浏览器将自动定义
出箱型体的尺寸。
Billboard广告、警示牌、海报节点实例
[实例4-9] 在立体场景中调用安全防火警示牌;为保
护人类赖以生存的地球,保护生态平衡,防止森林
火灾,经常看到一些警示牌;Billboard节点能创建
出逼真三维立体警示牌造型,且总是面向观众的,
如下图(4-14)所示
采用什么节
点完成?
Anchor锚节点(超级链接群节点)
作用:
Anchor锚节点即超级链接群节点,它的作用是链
接VRML三维立体空间中各个不同场景,使VRML
世界变得更加生动有趣。还可以利用Anchor锚节
点直接上网,实现真正意义上的网络世界。
Anchor锚节点(超级链接群节点)能够实现VRML场景
之间的调用和互动。
它是VRML的外部接口,实现与HTML网页之间的调
用及与3D之间的调用等。
使用超级链接功能实现网络上任何地域或文件之间
的互联、互动及感知。
Anchor锚节点语法
Anchor锚节点语法结构如图4-15所示
Anchor 锚节点
addChildren Children[ ] removeChildren
Shape 模型节点
Appearance外观属性节点 几何或文本造型节点
Material 造型外观节点
外观节点
Appearance域 Geometry 域
Anchor锚节点语法定义
Anchor{
children [ ] #域值类型 SFNode
bboxCenter #域值类型 SFVec3f
bboxsize – – #域值类型 SFVec3f
paramter [ ] #域值类型 SFString
description “ ” #域值类型 SFString
url [ ] #域值类型 SFString
addChildren #输入接口 SFNode
removeChildren #输出接口 SFNode
}
域名和域值详解
(1) url 域
指定需装入文件的路径或网络导航器地址URL。
如果指定多个URL,顺序进行排列,浏览器装入
从URL序列中发现的第一个文件。
(2) children域
指定场景中锚节点对象。
它包含指向其他文件(在url域中指定)的超级链接。
当观察者单击其中的一个对象时,浏览器便装
入在url域中指定的文件。
(3) description域
指定一个文本字符串提示,当移动光标到锚节点对象而不
单击它时,浏览器显示该提示字符串文件。
(4) parameter域
为VRML和HTML浏览器附加的信息,这些信息是一连串的
字符串,格式为“关键词=值”的字符串。
(5) bboxCenter域
指定包围Anchor锚中子节点对象的包围盒的中心。
(6) bboxSize域
指定包围Anchor锚中子节点对象的包围盒在X、Y、Z方向
上的尺寸。
Anchor锚节点说明
当用户选择Anchor节点中的任何一个子节点对象时,可将
Anchor节点中URL域中指定的文件从网上取来。
如果此文件是VRML世界,则装入并显示它,以取代包含
本Anchor锚节点的世界。
如果取得的文件是其他类型的文档,由浏览器决定如何处
理这些数据。
Anchor节点可用于将浏览者带入虚拟世界中的一个特定观察
位置,
在指定URL时要以“#viewpointName”结尾,
“#viewpointName”是以DEF定义的视点名。例如:
Anchor
{
url [“ #View”]
children [ Box{ } ]
}
这样就定义了一个Anchor
节点。当选定Box时,浏览
者将置于“way”世界中的
名为“View1”的视点处。
Anchor 锚节点实例
[实例4-10] 使用Anchor 锚节点,实现两个VRML程序之
间的调用。当触摸第一个VRML程序的立方体造型
时,调用第二个VRML程序显示一个球体造型,然
后再单击这个球体,则返回到第一个VRML程序的
场景中。如下图所示。
LOD细节层次节点(分级型群节点)
空间的细节层次控制原理的具体任务?
是通过空间距离的远近来展现空间造型的各个细节。
细节层次控制和现实世界中的感观是极为相似的。在现实世界
中人们都体验过,在很远的地方时,只能隐约地看到一座建筑
物的轮廓、形状和大小等,但是当你走近建筑物时,就会看清
楚整个建筑物的具体框架结构,再走近些会看到更加清晰的内
容。
具体过程
在VRML世界里,根据不同的细节层次节点创建出不同的造型,
然后再根据在VRML世界中视觉与立体空间造型的远近在浏览器
中调用不同细节的空间造型。
如果造型与浏览者较远时,造型的细节就会比较少,且比较粗
糙;
如果造型与浏览者较近时,则会看到更加清晰的细节。
在细节层次比较少时,浏览速度会很快;
如果造型比较复杂时,会直接影响浏览的速度,所以应尽可能
不设计过于复杂的造型,以提高VRNL的浏览速度。
LOD(Level Of Detail)细节层次节点
是分级型群节点,用于对相同景物做出不同精细度的刻画
通过VRML所提供的LOD细节层次节点,可以将各个不同的
细节穿插起来,在不同的距离调用不同的细节空间造型。
在创建VRML虚拟现实空间造型时,要平衡浏览器速度和造型
的真实性两者之间的关系。
如果造型越真实,相应的VRML文件就越大,就要影响浏
览器的浏览速度,耗费大量的CPU时间。
而LOD细节层次节点能够解决这一问题,可以对不同的景
物做出不同细致的刻画,比较近的景物用比较精细的描述,
比较远的景物用比较粗糙的描述,分级程度完全根据浏览
者与景物的相对距离而定,从而提高浏览器的速度。
LOD细节层次节点语法
LOD细节层次节点语法结构如下图(4-20)所示
Group组节点
Children[ ]
Inline内联节点
LOD细节层次节点
Level[ ]
LOD细节层次节点语法定义
LOD{
level [ ] #exposefield MSNode
center 0 0 0 #field SFVec3f
range [ ] #field MFFloat
}
域名和域值详解
(1) level域的域值
是一个包含在组内的子节点的列表。该域值可以包含
Shape节点和其他编组节点。
在该域值中所列出的每一个子节点都分别描述了不同的细
节造型,通常第一个子节点提供最高细节层次的空间造型,
后面的子节点的细节层次依次降低。至于不同细节层次造
型的切换,则由空间造型距离的远近来决定。
Level域的默认值为一空的子节点。
(2) center域的域值
定义了LOD节点的子节点的几何中心位置坐标。
该域值与原点的距离可以用来作为不同细节层次选取的依
据。其默认值为( 0 0 0 )。
(3) range域的域值
定义了观察者与对象(造型)之间距离范围的大小。
它是用来描述与空间造型的距离远近的列表,
根据此列表浏览器会从一个细节切换到另一个
细节。
需要注意的是,该域值必须为正,并且必须是
顺序增长。
[实例4-13] 使用细节层次节点,比较在10 米以内观
察哑铃的效果和在10 --20米观察哑铃的效果。