天地混沌如鸡子,盘古生其中。 此实例乃本大侠初学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 虚拟实境,并逐一对照核实源码中所言效果,以知其所 以然。 值得提醒的是:虚拟实境的下载较其它文件要慢。在以上的实例中,一定 要等背景及表面粘贴文件,以及声音文件都下载好以后,再开始浏览。 练习题: 阅读并理解此虚拟实境之源码,修改源码,取消虚拟实境中的闪电背境及雷声。假 如阁下有更好的图案, 则不妨用作背景试试。 下一个实例中,盘古已推开天地,阴阳初判矣。 |