3DVRI虚拟样板房演示不但模拟出真实的室内空间真实场景,还为您提供全方位的数据查询以及超强的互动功能——从简单的开关门,到亲手打开与关闭房间内的水龙头等设施,以及更复杂的装修方案替换。
上图是点击“虚拟现实”按钮即将把画面完全显示出来的截图,Neobook为这些多媒体的出现隐藏提供了多种过渡效果,使用起来得心应手,引人注目。
上图的过渡效果就是:“水平编排”。速度为 “3”,如下图所示。
二、如何控制场景载入挂接
在变色龙演示制作教程中,我们讲到在场景载入时可以播放一个Flash动画;在埃及神庙演示制作教程中,我们提到在场景载入时可以显示一个进度条。这些是场景载入时可以应用的技巧。
在这里我们讲一下如何实现场景的载入和挂接。看过前面两篇教程,有人会问:什么时候场景需要载入,什么时候需要挂接呢?
这里简单分析一下:使用Neobook来制作多媒体演示时,往往需要多个页面,而虚拟显示场景就在事先设计好的某一页中。你可以想象3DVRI虚拟现实场景就象计算机内存中的一个“王国”,当你第一次来到虚拟场景页面时,系统从IVE文件中载入场景到内存中建立起来虚拟场景“王国”,你立即可以看到“王国”的面貌,当你离开虚拟场景页面时,“王国”还在内存那里,只是你没有看它,因此要暂时切断联系,这叫场景的“分离”;当你再次来到虚拟场景页面时,只需要与“王国”恢复联系即可,因为免去场景载入删除之苦,所以速度很快,瞬间完成,这叫场景的“挂接”。最后您关闭演示的时候,王国就消失了。
上面分析知道,在演示中虚拟现实场景只进行一次载入过程,剩下的就是挂接和分离了。其中场景的载入和挂接是在页面进入时完成的,那么我们只需要设置一个全局变量即可,当场景载入后,改变它的初值,所以说,判断这个变量是否等于它的初值,决定了页面进入时,是采用场景载入命令,还是采用场景挂接命令。关键部分代码如下:
书籍-->书籍属性-->动作-->启动 脚本中,声明全局变量,并设置初值为0:
SetVar "[Windows]" "0"
下面代码摘录于 页面“VR_Page”页面属性-->操作 脚本:
If "[Windows]" "=" "0"
HideObject "Rectangle1" "None" "0"
.......场景初始化.....
初始化VR窗口 "Rectangle1" "[Return_Var]"
装入VR场景 "[TempDir]Room.ivz" "[Return_Var]"
.....................
.......变量..........
SetVar "[Windows]" "1"
ShowObject "Rectangle1" "None" "0"
Else
连接VR窗口 "Rectangle1" "[Return_Var]"
适应VR窗口大小 "[Return_Var]"
设置当前视图为给出序号相机 "0" "[Return_Var]"
将当前相机设置成初始状态 "[Return_Var]"
EndIf
三、使用滚动条表现超长超宽的图片
如下图,当图片超过容器的长度或高度时,如果不想缩放图片,那就加个滚动条吧!
具体设置是,注意选用“实际尺寸”:
四、交互模式开关的实现
交互模式开关,导航图开关,音乐开关这几项也是虚拟现实控制面板的重要内容。
下面逐一讲述。
交互模式开关的代码列出如下,该功能可以打开或关闭物体交互功能,如控制物体动画播放与暂停,物体信息查询等等。
If "[CheckBox1]" "=" "Checked"
设置鼠标位置的物体的检测功能状态 "1" "[Return_Var]"
Else
设置鼠标位置的物体的检测功能状态 "0" "[Return_Var]"
EndIf
变量[CheckBox1]表示该点选框当前的状态,勾选或者没有勾选,是系统自带变量。
五、导航图开关的实现
导航图开关的代码列出如下,该功能可以打开或关闭虚拟场景中加好的导航图。
If "[CheckBox2]" "=" "Checked"
显示场景中的导航图 "[Return_Var]"
Else
隐藏场景中的导航图 "[Return_Var]"
EndIf
变量[CheckBox2]表示该点选框当前的状态,勾选或者没有勾选,是系统自带变量。
导航图像详细的设置可以参见火星人lengye的导航图教程:3dvri & neobook 中加入导航图 。
六、音乐开关的实现
音乐开关的代码列出如下,该功能可以播放或停止选定的音乐。
If "[CheckBox10]" "=" "Checked"
If "[sound_flag]" "=" "1"
PlaySoundFile "D:\样板房\SuCai\says .mp3" "Loop"
EndIf
Else
StopMedia ""
EndIf
变量[CheckBox10]表示该点选框当前的状态,勾选或者没有勾选,是系统自带变量。
变量[sound_flag]表示在声卡检测的结果,如果是“1”,那么就是声卡可以播放音乐。有关声卡检测的教程可以看教程《埃及卢克索神庙演示》中的详细说明。
七、控制面板的内容
控制面板的内容:通常有上面几项开关,导航相机视图,操作说明
控制面板的制作介绍见《埃及卢克索神庙演示》,上面交互模式开关,导航图开关,和音乐开关这几项介绍都是控制面板的一部分。
3DVRI虚拟样板房演示的控制面板右侧是一个操作说明,该说明也是使用带滚动条的图片制作的,详细制作及设置见前面的 三、使用滚动条表现超长超宽的图片。
八、开关水龙头等物体互动
开关水龙头,方案替换等都属于物体互动的内容,在《埃及卢克索神庙演示》制作专题介绍中已有详细的介绍。这里仅仅介绍开关水龙头的实现过程。
水龙头的流水动画特效涉及了两方面:1、操作对象(水龙头);2、流水对象(流水,水面)
实现方法:
1、首先把交互物体挂接动作命令,动作命令可以写入一个子程序中。
打开 3DVRI虚拟样板房演示的Neobook工程,点主菜单 书籍-->子程序-->OpenWater,可以看到子程序OpenWater的代码如下(这里添加了注释):
:OpenWater
........如果可以播放声音,则播放水流声音
If "[sound_flag]" "=" "1"
PlaySoundFile "D:\样板房\Di.wav" "Normal"
EndIf
........变量[water_flag]记录水龙头开关状态的:0为关,1为开
If "[water_flag]" "=" "0"
SetVar "[water_flag]" "1"
........显示水流,水面动画
设置给出名称switch开关物体所有子节点成开状态 "OSG_Switch01" "[Return_Var]"
........播放水流,水面动画
设置给出SEQUENCE物体给出序号的物体的播放时间 "Water_Sequence01" "0" "3" "[Return_Var]"
设置给出SEQUENCE物体播放循环设置状态 "Water_Sequence01" "0" "[Return_Var]"
Else
SetVar "[water_flag]" "0"
........不显示水流,水面动画
设置给出名称switch开关物体所有子节点成关状态 "OSG_Switch01" "[Return_Var]"
EndIf
Return
现在具体解释一下上面的细节。
水龙头有两种状态:开和关,那么水流和动态水面也要相应两种状态:显示和隐藏。
因此,这些物体的控制关系是:
综上所述,通过OSG_Switch帮助物体和Water_Sequence帮助物体的协作实现了水龙头的交互。
九、物体查询
物体查询和更换方案这方面在变色龙教程里讲述的比较多,这里侧重讲如何在一个“新窗口”中展示关注的物体。看图,正在点击关注的物体。
在“新窗口”中展示物体。
设计思路:
在远离场景周边一个“僻静”的角落(远一点好!:) ),建立你的物品展示,采用专门的相机,这样用户可能不会由此漫游到场景的中心区域了,好像来到另外一个世界(场景),这样做好处是无需加上另外场景进行来回切换了,速度也快得很,只要把场景进行分离,挂接到新的ractangle,设置专门的相机就可以了,用户一般看不出这些居然在一个场景里面。
关键的脚本如下:
.把关注物体关联鼠标形状,挂接要执行的动作子程序Chick02_Opacity
物体关联鼠标形状 "02_Opacity" "6" "[Return_Var]"
物体关联子程序 "02_Opacity" "1" "Chick02_Opacity" "[Return_Var]"
.采用专门的相机观看物体(在子程序Chick02_Opacity中节选)
设置当前视图为给出序号相机 "6" "[Return_Var]"
将当前相机设置成初始状态 "[Return_Var]"
.当关闭“新窗口”时,虚拟场景恢复原来的相机(在容器Container8中按钮PushButton25的操作脚本中节选)
设置当前视图为给出序号相机 "0" "[Return_Var]"
注:在新窗口中点击那个关注物体可以改变样式(下图),这个实现很简单,就是两个物体通过使用OSG_Switch帮助物体实现交替显示的方法实现的。读者通过前面的教程可以很容易的理解。
这里仅列出关键代码:
.把关注物体01_Red01和02_Opacity01关联鼠标形状,挂接要执行的动作子程序
物体关联鼠标形状 "01_Red01" "6" "[Return_Var]"
物体关联子程序 "01_Red01" "1" "ChickBox_01" "[Return_Var]"
物体关联鼠标形状 "02_Opacity01" "6" "[Return_Var]"
物体关联子程序 "02_Opacity01" "1" "ChickBox_02" "[Return_Var]"
.子程序ChickBox_01和ChickBox_02实现显示两物体其一。
:ChickBox_01
设置给出名称switch开关物体指给出序号的单个子节点成开状态 "Switch_Box_01" "1" "[Return_Var]"
Return
:ChickBox_02
设置给出名称switch开关物体指给出序号的单个子节点成开状态 "Switch_Box_01" "0" "[Return_Var]"
Return
限于篇幅,该演示的制作还有很多实用的技巧和办法留给读者们探索和总结。
《变色龙演示制作教程》,《埃及卢克索神庙演示制作教程》,《曲江城市规划演示制作教程》,以及本篇教程这些教程中介绍的知识点,都是互相印证的,当你逐篇看完前面的小教程和这几个专题介绍教程,您对3DVRI的理解就会日益深刻,能够掌握3DVRI演示的精华,从而做出自己的精彩的作品。