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-05  
火星3DVRI 1063虚拟现实平台卢克索神庙演示制作过程专题介绍(含工程源文件下载)

      埃及的一些标志性建筑是世界上历史最悠久的建筑之一,火星3DVRI埃及卢克索神庙演示使我们足不出户体验到埃及古老文明的震撼,在计算机屏幕上开始我们的光辉灿烂的古埃及神庙之旅吧。这篇教程详细讲述了神庙演示制作中的朵朵奇葩。

      注意两点:

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

● 当把埃及神庙等Neobook工程文件拷贝到别的机器上查看时,常会遇到图像丢失的问题。

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

      对于上一篇教程《变色龙》附件中的Neobook工程文件以及演示的其他文件类似这样处理。

一、多页面安排组织的另外思路:跳转,返回操作

      埃及神庙演示的素材安排与变色龙不一样。 变色龙演示用来切换到各个页面的按钮都是放在主页面上的,这些按钮在各个页面都是可见的;下图为变色龙演示主页。

      而埃及神庙演示的这些按钮是仅仅位于事先设定的一个页面上的,当切换到其他页面时,要通过 “返回” 按钮来返回到事先设定的页面中。 (注意:如果您不想让用户按Page Up,Page Down随意在演示中进行页面切换,请禁用Page Up,Page Down键,详细参见《变色龙》教程)

下图为事先设定的页面。

      下图为带有 ”返回“ 按钮的相关页面。

     二、场景自动载入和挂接功能

      实现场景挂接分离的自动化操作,我们把很多与场景载入,挂接和分离的工作放在页面的进入退出上面,当我们进行页面切换的时候,就可以不用理会要执行的内容细节了,仅仅需要简单的GotoPage命令就可以了,因为任务细节已经在页面的进入退出中执行掉了。

      三、控制面板的设计

      控制面板的弹出过程设计在 火星虚拟论坛新教程之十七 里已经提到了。

      这里仅仅说一下,控制面板的按钮交互界面。
      读者可以看到演示中,当鼠标在控制面板上各个按钮掠过时,可以看到当鼠标在某个按钮上方时左边提示区域为图片,当鼠标在移出按钮时提示区域变成Gif动画。


      在Neobook工程里,您可以看到实际上左边提示区域是由不同时显示的图片对象和GiF对象组成的,当鼠标在按钮上时,显示图片控件隐藏Gif控件,并使图片控件显示相应的内容;当鼠标移出按钮落在面板背景上时,则隐藏图片控件显示Gif控件,这样这种特效就完成了。代码如下:
      按钮鼠标移入:
      HideObject "GIF_OldMov" "None" "0"
      ShowObject "Cam_B_Face" "None" "0"
      按钮鼠标移出:
      HideObject "Cam_B_Face" "None" "0"
      ShowObject "GIF_OldMov" "None" "0"

      四、更换雕塑实现过程

      更换雕塑有两种办法:1. 通过界面交互 2. 通过场景物体交互

      1. 通过界面交互

      下面为“更换雕塑”按钮的操作脚本内容:
      设置当前视图为给出序号相机 "3" "[Return_Var]"
      设置相机操作的按键编码 "82" "[Return_Var]"
      ShowObject "Container6" "Slide Left" "3"

      上面完成内容是切换到设定的相机,相继位置要还原到初始位置,调入“更换雕塑”面板。

     2. 通过场景物体交互
     在页面"VR_Page"的 页面属性-->操作 脚本中可以找到:
     物体关联鼠标形状 "Nan_17" "6" "[Return_Var]"
     物体关联鼠标形状 "DiaoSu_A_24" "6" "[Return_Var]"
     物体关联子程序 "Nan_17" "1" "shengxiang" "[Return_Var]"
     物体关联子程序 "DiaoSu_A_24" "1" "shengxiang" "[Return_Var]"
     子程序内容:
     :shengxiang
          ShowObject "Container6" "Slide Left" "3"
     Return
     上面的完成内容是使场景中的特定物体的鼠标形状为手形,也能够在点击物体时完成一个动作:调入“更换雕塑”面板

     至于更换雕塑具体执行的办法很简单了,就是Switch节点显示隐藏设置了,请读者自行体会。

     五、开关门实现过程
     开关门也有两种办法:1. 通过界面交互 2. 通过场景物体交互
     从页面"VR_Page"的 页面属性-->操作 脚本中可以找到:
     物体关联鼠标形状 "Door_A_03" "6" "[Return_Var]"
     物体关联鼠标形状 "Door_B_03" "6" "[Return_Var]"
     物体关联子程序 "Door_A_03" "1" "Door_A" "[Return_Var]"
     物体关联子程序 "Door_B_03" "1" "Door_B" "[Return_Var]"

     从“开关门”按钮的操作脚本中可以找到:
     GoSub "Door_A"
     GoSub "Door_B"

     这两种方法都是在必要的时候调用执行开门(关门)动作的子程序完成的。以子程序"Door_A"为例说明:
     :Door_A
     If "[door_A_flag]" "=" "0"
          设置TRANSFORM物体的ANIMATEPATH的开始时间和结束时间 "Door_A_03" "3.33" "0" "[Return_Var]"
          SetVar "[door_A_flag]" "1"
     Else
          设置TRANSFORM物体的ANIMATEPATH的开始时间和结束时间 "Door_A_03" "0" "3.33" "[Return_Var]"
          SetVar "[door_A_flag]" "0"
     EndIf
     设置TRANSFORM物体播放状态 "Door_A_03" "0" "[Return_Var]"
     Return
     上面指令“设置TRANSFORM物体的ANIMATEPATH的开始时间和结束时间”的参数意义:
     参数一:TRANSFORM物体的名称,如"Door_A_03"
     参数二三:设定动画的开始时间和结束时间,如果参数二三的内容互换,那么动画就要倒播,“开门”就要变成“关门”,“关门”就要变成“开门”。

     六、显卡检测
     显卡检测的实现(读者也可以做成一个子程序。用一个全局变量来接收子程序的执行结果,要获取子程序的执行结果只要对这个全局变量进行判断即可)
     下面是从页面"VR_Page"的 页面属性-->操作 脚本中摘录的内容
     返回当前OpenGL的版本号 "[GeneralOutputStringTwo]" "[Return_Var]"
     If "[GeneralOutputStringTwo]" "<" "1.2"
          GotoPage "Flash"
     Else
          检测显卡是否支持贴图压缩 "[FastOutputIntOne]" "[Return_Var]"
          If "[FastOutputIntOne]" "=" "0"
               GotoPage "Flash"
          Else
               检测显卡支持贴图大小 "[FastOutputIntOne]" "[Return_Var]"
               If "[FastOutputIntOne]" "<=" "1024"
                    GotoPage "Flash"
               Else
                    装入VR场景 "[TempDir]Amon.ivz" "[Return_Var]"
                    设置当前视图为给出序号相机 "0" "[Return_Var]"
                    自由旋转相机显示VR场景 "[Return_Var]"

                    . 其他内容
               EndIF
          EndIF
     EndIF
     这些代码的内容是:如果机器配置过低或者驱动版本过低,那么就跳转到Flash页面来播放Flash,否则就载入虚拟场景进行漫游。

     七、声卡检测
     在 主菜单 书籍-->书籍属性-->动作-->启动栏目中,可以找到:
     .声卡检测
     DefineVar "[Sound_Flag]" "Integer" "" "Global" "-1"
     检测声卡状态 "[FastOutputIntOne]" "[Return_Var]"
     If "[FastOutputIntOne]" "=" "0"
          SetVar "[Sound_Flag]" "0"
     Else
          SetVar "[Sound_Flag]" "1"
     EndIf
     全局变量[Sound_Flag]表示声卡检测的结果。
     然后在工程的其他地方只要播放声音,只需要判断[Sound_Flag]的值就可以了。如:
     页面“FacePage”页面属性-->操作 的脚本中:
     If "[Sound_Flag]" "=" "1"
          PlaySoundFile "d:\埃及神庙\NE.mp3" "Loop"
     EndIf

     八、组合与容器
     他们具有相似的显示效果,使用组合减少了容器的数量,用于各种特别的信息提示内容
     下图可以看到,象这些红框圈出的对象这样的都是“组合”。

      怎样才能生成组合物体呢?看图。
      选择好您要组合的几个物体,然后按下主菜单的组合工具。

      九、进度条制作

      如果您要执行一系列的任务,那么这种方法很好用了:在不同阶段改变 “滚动条” 不同的尺寸,请看例子。
      在场景载入的时候,执行脚本如下(下面列出脚本主要内容,请打开埃及神庙演示工程文件Amon_Scene_CN.pub,鼠标右键点击页面“VR_Page”,在右键菜单上选择页面属性-->操作 可以查看脚本):

      初始化VR窗口 "Rectangle2" "[Return_Var]"
      SizeObject "Rectangle5" "358" "20"

      装入VR场景 "[TempDir]Amon.ivz" "[Return_Var]"
      SizeObject "Rectangle5" "508" "20"

      设置当前视图为给出序号相机 "0" "[Return_Var]"
      自由旋转相机显示VR场景 "[Return_Var]"
      SizeObject "Rectangle5" "758" "20"

      Delay "1000"
      将当前相机设置成初始状态 "[Return_Var]"
      SizeObject "Rectangle5" "1024" "20"

      该滚动条是由两个Rectangle控件组成:一个充当滚动条的滑块,一个充当背景,如图

      十、使用临时文件运行时释放到临时文件夹
      为了使得发布时的文件尽量少您可以使用临时文件,打包时,系统会自动把文件包含进可执行文件中,运行时会自动释放到临时文件中的。
      使用步骤:
      在 主菜单 书籍-->书籍属性-->动作-->启动栏目中,
      ExtractFile "d:\埃及神庙\Amon.ivz" "[TempDir]"

      调入场景:页面“VR_Page”页面属性-->操作 的脚本:
      装入VR场景 "[TempDir]Amon.ivz" "[Return_Var]"

      程序退出时删除临时文件:在 主菜单 书籍-->书籍属性-->动作-->关闭栏目中,
      FileErase "[TempDir]Amon.ivz"

      十一、嵌入文件

      最后说一点嵌入的应用。在Neobook中,您可以把某些文件嵌入到发布的可执行文件中去。 这样在运行的时候,它是不会释放到任何地方的,提高了保密性。
      具体办法:(导航图的嵌入为例)
      首先 点主菜单 书籍-->嵌入文件-->打开“被嵌入的文件”对话框,下图:
    

      点击添加按钮就可以嵌入文件了。
      使用时只要使用标记 “[Embedded]文件名” 就可以了,如,
      页面"VR_Page"的 页面属性-->操作 脚本中:
      在当前的场景中加入导航图 "0" "0" "3" "5" "-12210.09" "12210.02" "-6815.84" "6740.54" "[Embedded]DaoHang_01.tga" "[Return_Var]"
      这条命令引用的是导航图文件DaoHang_01.tga。

      限于篇幅,该演示的制作还有很多实用的技巧和办法留给读者们探索和总结。

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