天地混沌如鸡子,盘古生其中。
此实例乃本大侠初学VRML语言时颇为自负之作。作为第一个例子,它显得难了些。
但按照神话情节的发展,只好把它放在最前面。
想象这样的画面:茫茫广宇似一个硕大的鸡卵,而巨人盘古就在其中孕育。进一步
想象,它远处看是什么样子?它里面是什么样子?巨人的孕育是否要有霹雳闪电的
锻炼?
且看本大侠如何设计此虚拟实境:
(一〕从第一行开始:
#VRML V2.0 utf8 #此指令必须放在第一行。
WorldInfo { #以下为版权声明
title "天地混沌"
info [
"Author: 金臂螳螂"
"Date: Feb. 28, 1998 (Sat)",
]
}
(二〕设定虚拟实境的动作(navigation〕:
NavigationInfo { #以下控制虚拟实境的动作
type "EXAMINE" #动作的参数
headlight TRUE #光源控制
speed 1.0 #动作的速度
}
看出些门道来了吧?其中type,headlight以及speed后的参数可以调整。
(三〕为增加闪电效果,先用一幅画来作背景:
Background { #背景,可规定一到六面
frontUrl ["final.jpg"] #前方背景所用图象路径
backUrl ["final.jpg"] #后方
topUrl ["final.jpg"] #上方
bottomUrl ["final.jpg"] #下方
leftUrl ["final.jpg"] #左方
rightUrl ["final.jpg"] #右方
}
(四〕为内外几层来浏览这个巨卵,再规定一下视点:
Group { #组,当虚拟实境中有多个物体(children)时使用
children [ #组中的单个物体
DEF EntryView Viewpoint { #开始视点
position 0 0 10 #视点参数
description "Middle" #视点名称,在中层
},
DEF Outside Viewpoint { #外层视点
position 0 0 40
description "Outside"
},
DEF Inside Viewpoint { #内层视点
position 0 0 3
description "Inside"
}
]
}
请注意:开始视点是从中间开始。阁下可在自己练习时把它改成从外或里开始。若
能成功,则阁下离认明庐山真面目已不远了。
(五〕现在来用三个圆心都是零点圆球来体现鸡卵:
Transform { #规定单个物体特征
children [
Shape { #规定物体外部
appearance Appearance {
material Material { emissiveColor 1 0 0 } #物体颜色
texture ImageTexture {url "01_yy.gif"} #物体表面粘贴的图象路
#径,注意:粘贴了图象
#后,物体颜色将被盖住
}
geometry Sphere { } #(最内层)物体几何形状,球体, 标准直径
}
]
}
Transform {
children [
Shape {
appearance Appearance {
material Material {
specularColor 1 1 1 #这两行指令规定了物体的
transparency 0.5 #颜色及其透明度
}
texture ImageTexture {url "reptile.gif"} #物体表面粘贴的图象路径,
#注意:由于物体自身颜色
#透明,图象有模糊效果
}
geometry Sphere { radius 5 } #此物体还是个球体,直径为5,比标准
#直径大
},
Shape {
appearance Appearance {
material Material {
specularColor 1 1 0
transparency 0.2
}
}
geometry Sphere { radius 15 } #此物体还是个球体,直径为15,直径最大
}
]
}
(六〕哇!还忘了放入雷声。下面是仅是插入声音的指令,还未规定插入哪里:
Sound { #规定声音参数
direction 0 0 1 #方向
intensity 1 #密度
location 0 0 0 #位置
maxBack 20 #后最大
maxFront 20 #前最大
minBack 5 #后最小
minFront 5 #前最小
priority 0 #优先
spatialize TRUE #形成空间 (立体声)
source AudioClip { #声源
loop TRUE #反复
description "Thunder" #声音名称
pitch 1.0 #音量
url "thunder.wav" #声音文件路径
startTime 1 #开始时间
}
}
(七〕把声音插入到最小的球体里,这样,越往里浏览,声音越响,反之则渐小。
插完后,第(五〕中三个圆球部分的最后指令如下:
Transform { #规定单个物体特征
children [
Shape { #规定物体外部
appearance Appearance {
material Material { emissiveColor 1 0 0 } #物体颜色
texture ImageTexture {url "01_yy.gif"} #物体表面粘贴的图象路
#径,注意:粘贴了图象
#后,物体颜色将被盖住
}
geometry Sphere { } #(最内层)物体几何形状,球体, 标准直径
},
Sound { #规定声音参数
direction 0 0 1 #方向
intensity 1 #密度
location 0 0 0 #位置
maxBack 20 #后最大
maxFront 20 #前最大
minBack 5 #后最小
minFront 5 #前最小
priority 0 #优先
spatialize TRUE #形成空间 (立体声)
source AudioClip { #声源
loop TRUE #反复
description "Thunder" #声音名称
pitch 1.0 #音量
url "thunder.wav" #声音文件路径
startTime 1 #开始时间
}
}
]
}
Transform {
children [
Shape {
appearance Appearance {
material Material {
specularColor 1 1 1 #这两行指令规定了物体的
transparency 0.5 #颜色及其透明度
}
texture ImageTexture {url "reptile.gif"} #物体表面粘贴的图象路径,
#注意:由于物体自身颜色
#透明,图象有模糊效果
}
geometry Sphere { radius 5 } #此物体还是个球体,直径为5,比标准
#直径大
},
Shape {
appearance Appearance {
material Material {
specularColor 1 1 0
transparency 0.2
}
}
geometry Sphere { radius 15 } #此物体还是个球体,直径为15,直径最大
}
]
}
(八〕至此,阁下已练到八步螳螂拳法:-))此时,将所有红色指令按其出现的顺序
剪切到一个文件里作为源码,再存为*.wrl文件,如a_Dragon.wrl。但在浏览此虚拟
实境前,还需下载如下文件:
final.jpg : 兰色的闪电,像一只硕大无朋的巨爪攫向人圜
01_yy.gif : 龙马从渭水里驮出来的八卦图
reptile.gif : 从北海九龙壁上飞来的金龙
thunder.wav : 来自远古的神圣肃穆的雷声
并放在与a_Dragon.wrl相同的文件夹里。
最后,浏览此 a_Dragon.wrl 虚拟实境,并逐一对照核实源码中所言效果,以知其所
以然。
值得提醒的是:虚拟实境的下载较其它文件要慢。在以上的实例中,一定
要等背景及表面粘贴文件,以及声音文件都下载好以后,再开始浏览。
练习题:
阅读并理解此虚拟实境之源码,修改源码,取消虚拟实境中的闪电背境及雷声。假
如阁下有更好的图案, 则不妨用作背景试试。
下一个实例中,盘古已推开天地,阴阳初判矣。
|