埃及的一些标志性建筑是世界上历史最悠久的建筑之一,火星3DVRI埃及卢克索神庙演示使我们足不出户体验到埃及古老文明的震撼,在计算机屏幕上开始我们的光辉灿烂的古埃及神庙之旅吧。这篇教程详细讲述了神庙演示制作中的朵朵奇葩。
而埃及神庙演示的这些按钮是仅仅位于事先设定的一个页面上的,当切换到其他页面时,要通过 “返回” 按钮来返回到事先设定的页面中。
(注意:如果您不想让用户按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。
限于篇幅,该演示的制作还有很多实用的技巧和办法留给读者们探索和总结。