虚拟现实创作工具Shockwave3D简介
Shockwave3D是MacroMedia 公司出色的三维引擎,但国内对其研究很少.利用ShockWave3D可以方便实现虚拟现实应用,尤其是Web3D应用.使用Director多媒体开发工具以及Lingo开发语言,可以对虚拟现实应用进行深入的交互控制.文中分析了ShockWave3D虚拟现实应用的结构和技术特点,并对其中的漫游和碰撞检测部分进行了深入的探讨.
Shockwave 3D的应用范围很广。从简单的三维文字动画,到交互的三维游戏环境,都可以通过Shockwave 3D技术表现出来。通过Netscape Navigator浏览器或Microsoft Internet Explorer等支持Shockwave的浏览器,用户可以浏览你的互动影片。不过需要安装Shockwave播放器,这种免费的播放器在很多的网站都可以下载。
Director为Shockwave 3D加入了几百条控制Lingo,结合Director本身功能,无疑在交互能力上Shockwave 3D具有强大的优势。
创建Shockwave 3D场景
用户可以通过Lingo来创建Shockwave 3D场景,不过要想创建复杂一些的场景就必须借助3DS MAX或MAYA等三维软件。我们以3DS MAX为例,Discreet公司提供了输出Director W3D格式文件的插件,该插件适用于4.0以上版本,供用户免费下载。你可以在www.discreet.com/products/3dsmax/exporter/
register/下载。解压缩后将文件名为SW3D_Exp.dle的文件复制到“3ds max 4”目录下的“plugcfg”子目录中,即可完成该插件的安装。
启动3DS MAX4,创建一组静态物体。该场景中包含一个苹果(Apple)、一个花瓶(Vase)和三个梨子(Pear01、Pear02和Pear03)。选择菜单命令“File→Export”即可导出为Shockwave 3D Scene
Export (*.W3D)格式的文件(如图1)。
控制Shockwave 3D世界
选择菜单命令“File→Import”导入刚才建立的场景文件,在角色表中选中该文件,并将它拖动到舞台上。我们要实现的效果是:当用户按下向左箭头时,摄像机镜头就会向左移动,屏幕上的场景就会发生相应的变化。按下其他三个方向的箭头也会产生相应的移动。

图1
要想实现如此的功能,离开了Lingo是无法想象的。对于英文不太好的朋友来说,这实在不是一个好消息。还好,Macromedia公司为我们提供了3D Behaviors。即使你一点也不懂得Lingo,也可以轻松的创建和控制三维环境。
在开始我们的实例前,我们要了解一下关于3D Behaviors的一些知识。Director 8.5中包含了两种不同类型的3D Behaviors:Trigger(触发器)和Action(动作)。当用户某一动作(如鼠标单击)发生时,Trigger将向系统发出信号,从而引起指定的Action的执行。

图2
在Director中,Action又分成三种:Local Action(本地动作)、Public Action(全局动作)和Independent Action(独立动作)。当你把一个本地动作赋给一个Sprite后,该动作只能被赋给同一Sprite的触发器所触发。与本地动作不同的是:公共动作能被任何触发器触发,不管触发器是被赋给同一Sprite还是其他的Sprite。公共动作使用和本地动作一样的触发器,而独立动作根本无须触发器触发即可执行。比方说你可以使用独立动作中的Automatic Model
Rotation,让场景中的某个模型自动旋转;利用Model
Rollover Cursor,当你的鼠标指向某个模型时,指针将改变形状。
制作实例
通过摄像机,你可以观察到你所建立起来的虚拟世界。和现实生活中的摄像机一样,你可以通过移动Director的摄像机,从不同的角度和距离观赏你的虚拟世界,就好像在其中漫步一样,感觉不错喔!
要想让摄像机产生向上、下、左、右等方向的移动,我们要用到库面板中的两个Behaviors。并且Director提供的参数窗口,可以让你精确地控制摄像机的移动:
1、单击工具栏上的库按钮,打开库面板(如图2),确保3D Action Behaviors处于显示状态。
2、拖动Pan
Camera Horizontal Behavior到舞台上的3D场景上,释放鼠标左键。
3、弹出一个对话框窗口,在Degrees
to Pan Per Frame后的输入框中,设置每帧移动的幅度为10。在“Which group does this behavior belong to?”的文字框中输入Pan,创建一个名为Pan的组。需要注意的是:动作和它的触发器必须在同一个组内。
4、如果你这个时候单击播放按钮,事实上什么反应也没有。通常情况下,动作和触发器总是成对出现的。触发可以是键盘触发,也可以是鼠标触发。如果没有定义好键盘输入或鼠标输入发生,动作一般不会得以发生。(上文提到的独立动作除外)下面我们为Pan
Camera Horizontal behavior添加触发器。在库列表中选择“3D→Triggers”,拖动Keyboard
Input行为到舞台上的场景文件上。
5、弹出Keyboard
Input参数设置窗口,在Which key will be
used中选择Left Arrow,在Select a Group and Its Action中选择Group Pan - Pan Camera Left,即当用户按下左向箭头时,就将摄像机向左移动。
6、与上面的步骤类似,再次拖动Keyboard
Input至场景文件上,在弹出的对话框中依次选择Right
Arrow和Pan - Pan Camera
Right即可设置当用户按下右向箭头时,将向右移动摄像机。
OK,现在就可以单击播放按钮,当你按下左向箭头时,就会看到场景左侧原来无法看见的部分。当你按下右向箭头时,镜头也会产生相应的运动。下面我们要做的就是让摄像机产生竖直方向的运动。
这次我们使用的是Pan Camera Vertical behavior行为,具体设置方法与上述类似,不再赘述。通过这一步骤我们将实现:当用户按下上向箭头(Up Arrow)时,将镜头向上移动(Pan Camera Up)。当用户按下向下箭头(Down Arrow)时,将镜头向下移动(Pan Camera Down)。
如果你愿意的话,你还可以让你的场景中的模型具有交互性能。例如当你按下场景中的窗户时,窗户就打开了,感觉如何?