3DVRI 网站地图
首页
新闻
下载
演示
资源
屏保
画廊
论坛
销售
关于
教程
3DVRI 新闻&更新
火热推出火星3DVRI虚拟现实内容创作系统1063版
推出最新的NeoBook的三维虚拟插件
第二版场景编辑器即将推出
3DVRI最新演示 [下载]

 

联系我们
3DVRI OSG浙江技术支持中心
0579-82100757
3DVRI 销售电话:
029-88217026
13319222637
联系人:谢先生
Email:webmaster@3dvri.com
友情链接

OpenSceneGraph网站

DELTA3D官方网站
OpenGL网站

 

 

 

3DVRI 教程

[3DVRI新闻]  [3DVRI软件介绍]  [3DVRI软件新特性]  [3DVRI技术介绍]  [3DVRI软件研发流程

 [3DVRI虚拟现实技术介绍]  [3DVRI行业应用]  [3DVRI SDK开发手册 ]   [教程]   [常见问题解答]

2006-05-13  
火星3DVRI 1063虚拟现实平台虚拟样板房演示制作过程专题介绍(含工程源文件下载)

      3DVRI虚拟样板房演示不但模拟出真实的室内空间真实场景,还为您提供全方位的数据查询以及超强的互动功能——从简单的开关门,到亲手打开与关闭房间内的水龙头等设施,以及更复杂的装修方案替换。

      本篇教程对实现这些表现手法需要的制作流程与步骤进行了详细的讲解。

      注意两点:

当您使用3DVRI虚拟样板房演示的工程源文件编译与运行时,请您使用专门的3DVRI for Neobook插件,该插件可以从 变色龙演示专题介绍附件中 的Plugin文件夹得到。 重要的是,该特殊插件使用完毕之后,应换成您原来使用的3DVRI for Neobook插件,否则当您使用Neobook制作与发布新的演示时会不正常的

● 当把虚拟样板房演示的Neobook工程文件拷贝到别的机器上查看时,常会遇到图像丢失的问题。

      解决办法很简单:      
      当你把虚拟样板房演示下载解压后,将最里面的文件夹 “样板房” 放在D盘根目录下面,其Neobook工程文件位置是 D:\样板房\Room.pub,那么系统就会自动找回所有贴图了。

      对于前面的教程《变色龙》、《埃及卢克索神庙演示》、《曲江规划演示》附件中的Neobook工程文件以及演示的其他文件也要做类似这样处理。

      ★ 各种元素载入过程使用丰富的过渡效果
      ★ 如何控制场景载入挂接
      ★ 使用滚动条表现超长超宽的图片
      ★ 交互模式开关
      ★ 导航图开关
      ★ 音乐开关
      ★ 控制面板的内容:通常有这几项开关,导航相机视图,操作说明
      ★ 开关水龙头等物体互动
      ★ 物体查询

一、各种元素载入过程使用丰富的过渡效果

      上图是点击“虚拟现实”按钮即将把画面完全显示出来的截图,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演示的精华,从而做出自己的精彩的作品。

 
  教程所用相关文件下载>>