基于VRML的虚拟音乐厅

原创 2003年05月18日 11:05:00

基于VRML的虚拟音乐厅

一.VRML简介
   有没有见过三维网页,有没有见过网上商店的3D展示品,是不是感叹它们的真实感强,引人入胜?其实很多就是用VRML做的,VRML(Virtual Reality Modeling Language)是一种与互联网结合,用来描述三维交互世界的程序语言,可应用于创建虚拟现实的对象、景象和展示模型等。但是我们今天要做的不是虚拟3D网页,而是虚拟3D音乐厅,一个属于你自己的"虚拟音乐厅",怎么样?心动吧,心动不如行动,跟我来吧!:)

二.准备工作
   "磨刀不误砍材工",先来看看我们需要准备些什么:
首先,如果你的浏览器是Netscape的Navaigator的话,恭喜你,你不需要装任何插件就可浏览vrml网页;但是,如果是IE的话,还要装外挂程序,如ParallelGraphics公司开发的Cortona,或platinum公司开发的Cosmo Player,可以到上"华军软件园"down,网址是:http://www.onlinedown.net.安装过程就像装flash插件一样简单.
还要准备好Broland公司的最新"利器"--Delphi7.
好,"万事具备,只欠东风",现在就开始:

三.具体实现过程
   打开Delphi7.0,新建一个Project,在Form上添加一个Button,按钮的Caption属性设为"打开音频文件";再添加一个OpenDialog控件,用于打开音频文件;然后再在控件栏中的Internet项选取WebBrowser控件,WebBrowser控件用于把IE浏览器内置于Form窗体里.
好,现在双击Button1,在里面填入以下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
fp : TextFile;//文本文件
CurrentDir : string;//文件路径
sSelectSong:String;//用于组成VRML文件
begin
if OpenDialog1.Execute() then//选择音频文件
begin
sSelectSong:= sSelectSong+'Shape {appearance Appearance {material Material {}} geometry Sphere {radius 0.25}}';
sSelectSong:= sSelectSong+'Sound { source AudioClip { url "';
sSelectSong:= sSelectSong+ExtractFileName( OpenDialog1.FileName) ;//打开音频文件
sSelectSong:= sSelectSong+'" loop TRUE } ';
sSelectSong:= sSelectSong+' maxBack '+'10.0';
sSelectSong:= sSelectSong+' maxFront '+'10.0';
sSelectSong:= sSelectSong+' minBack '+'5';
sSelectSong:= sSelectSong+' minFront '+'6';
sSelectSong:= sSelectSong+'spatialize FALSE}';
//产生.vrml文件,并调用IE浏览器播放
AssignFile(fp, 'wrltestfile.wrl');//指定生成vrml的文件名
Rewrite(fp);
Writeln(fp,'#VRML V2.0 utf8');
Writeln(fp,sSelectSong); //写入vrml代码
CloseFile(fp);
GetDir(0,CurrentDir);//取文件路径
WebBrowser1.Navigate(CurrentDir+'/wrltestfile.wrl');
end
end;

   简单吧,好,现在就运行看看.

四.运行与扩展程序
   运行后,按"打开音频文件"选择.WAV或.MIDI音频文件播放(注意是.WAV或.MIDI文件,.MP3文件经笔者测试有些机子可以播放,有些不能,因为VRNL2.0标准只支持这两种音频格式和MPEG视频格式),用你的鼠标在上面前后或左右地慢慢拖动,你会感觉到声音的变化,好好地体会体会,是不是跟现实的声音传播一样真实啊?
但是,这时候的场景是非常简单的,里面只有一个圆球,四周漆黑一遍(姑且想象成在茫茫宇宙中吧:)),如果你已经熟悉VRML语法的话,你可以做出更加漂亮的场景,这样你在你自己做的场景里面听心爱的音乐,在里面走动,音乐随着你的走动在不断改变...
笔者通过对上面程序的扩展,作成一个完整的虚拟音乐播放器--虚拟音乐厅,并且参加广东省的高校杯获得一等奖,我想各位也可以通过扩展做一个属于自己的"虚拟音乐厅"..怎样扩展呢?其实通过以上程序的运行会产生一个名为wrltestfile.wrl的文件,包含以下vrml代码:

(1) #VRML V2.0 utf8
(2) Shape {
(3) appearance Appearance {material Material {}}
(4) geometry Sphere {radius 0.25}}
(5) Sound {source AudioClip {url "jita.WAV" loop TRUE }
(6) maxBack 10.0 maxFront 10.0 minBack 5 minFront 6
(7) spatialize FALSE
(8) }

   也许有人会奇怪,这么一点代码就能做成上面的效果?秘密就在我们一开始装的vrml的插件,这些插件就有如一个游戏引擎一样重要,它借助浏览器执行VRML代码.让我们来分析以下上面的VRML代码吧,其实,上面的8句代码,我们在程序里面都有出现,只是第五句有点不同,对啦,就是加入了"jita.WAV",这是我们通过OpenDialog引入的外部.WAV音频文件.聪明的你可能想到了,通过改变或增加其他VRML代码,不是可以达到个丰富的互动效果吗,完全正确!你可以通过改变第四句的radius来改变圆球的大小,或者把圆球改成其他形状(例如做个音箱),你可以通过改变第六句的 maxBack , maxFront ,minBack和minFront来改变声源的扩展方向扩展范围,另外还可以通过在第八句的后面添加一下代码来加入你喜欢的场景背景图案:

(9) Background
(10) {
(11) frontUrl "bgsky.jpg"
(12) backUrl "bgsky.jpg"
(13) leftUrl "bgsky.jpg"
(14) rightUrl "bgsky.jpg"
(15) topUrl "bgsky.jpg"
(16) bottomUrl "bgsky.jpg"
(17) }

   分析一下就知道,第(11)句加入场景中的前背景图片,第(12)句加入场景中的后背景图片,第(13)句加入场景中的左背景图片,第(14)句加入场景中的右背景图片,第(15)句加入场景中的上背景图片,第(16)句加入场景中的底背景图片,我在这里加入的图片是前后上下都一样的,你可以随意加入自己喜欢的图片,当然你的图片要放在程序本目录下.
当然你还可以加入其他的东东,加入其他的互动效果.例如要做成一个完整的播放器还要有菜单选择,播放暂停,换歌等功能,另外,你还可以定制多个声源点("音箱"),方法就是添加多个sound节点,例如你可以在上面代码的基础上添加一个背景声音(如鸟叫声)的代码:

Sound {source AudioClip {url "bird.WAV" loop TRUE }

   然后分别调节maxBack , maxFront ,minBack和minFront,就可以出来很好的效果,但是要提醒的是增加过多的声源点将会导致占用资源过多,从而拖满你的机子哦,而且会出现重叠音现象.
充分发挥你的想象力吧,只要你知道了VRML的一些基本原理和知识,然后遵从以上的方式,没有你做不到的,只有你想不到的.

 

VRML---第五章(动画流程和交互功能)

动画是物体随时间变化的动态效果。       实现动画的基本方法:由时间传感器控制动画的时钟,然后将时间控制参数作为事件传送给各种插补器节点,插补器依据事先设计好的时间关键点和动画关键值,在浏览...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2013年04月01日 13:43
  • 4098

VRML编程工具

1、VRML编译工具——VrmlPad。 VrmlPad中文版是集合了VRML代码下载、编辑、预览、调试等多种功能于一体,并拥有代码智能自动完成,动态错检测,语法高亮显示以及多文档同时编辑等特色。软件...
  • ckzhb
  • ckzhb
  • 2017年01月06日 19:37
  • 638

常见三维文件格式之STL, VRML, X3D

一.   STL STL只能用来表示封闭的面或者体,stl文件有两种:一种是明码格式,另一种是二进制格式。 他的文件格式非常简单 明码: solid name facet normal ni nj n...
  • Chinamming
  • Chinamming
  • 2013年11月20日 01:11
  • 8217

VRML语法基础跟简介

VRML语法基础和简介   VRML简介和基础语法 --------------------------------------------  一、VRML是什么  VRM...
  • judyge
  • judyge
  • 2015年03月31日 13:11
  • 1042

webots自学笔记(七)通过定义顶点构件3D形状(IndexedFaceSet节点)

在webots中使用VRML语言建模,这个语言是比较老的了,确实没有现在的建模工具好用。这一次讲的是IndexedFaceSet节点,在VRML语言里也是有的。         比方说我要...
  • clliu_hust
  • clliu_hust
  • 2017年11月16日 17:13
  • 41

VRML参考节点

VRML节点集包括基本几何节点、复杂群节点、VRML场景效果节点、动画节点及动态感知节点等。排序后的VRML节点集如下。   1.Anchor锚节点,是超级链接群节点,具有超级链接网络文件和站点功...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2013年03月18日 14:58
  • 6910

什么是 VRML 和 X3D

1 什么是 VRML 和 X3D 1.1 什么是VR       VR(Virtual Reality)是一个由计算机创建的虚拟世界系统.它使用硬件和软件设备创造一个动态的虚拟3D环境. 1.2...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2013年03月08日 16:46
  • 1774

VRML---第四章第三部分(声音效果)

在VRML中用来添加声音的节点有音频剪辑AudioClip节点、MovieTexture节点和声音Sound节点。       其中AudioClip节点和MovieTexture节点用来创建声...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2013年03月29日 14:55
  • 1955

VRML---第二章第三部分(纹理坐标及纹理坐标变换节点)

VRML提供了TextureCoordinate节点和TextureTransFrom节点来控制纹理坐标及纹理坐标变换。 纹理坐标节点 语法 TextureCoordinate{ #该域的域值...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2013年03月27日 19:49
  • 1233

虚拟现实建模语言VRML

一、基本概念 VRML是“虚拟现实建模语言”(VirtualRealityModelingLanguage)的首字母缩写。 节点(Node):构成虚拟世界的基本要素; 路由(Route)...
  • ckzhb
  • ckzhb
  • 2016年12月10日 21:01
  • 1823
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于VRML的虚拟音乐厅
举报原因:
原因补充:

(最多只允许输入30个字)