|
前不久,在论坛上我发了一个有关如何实现灯的开关问题的办法:
http://bbs.hxsd.com.cn/post/view?bid=28&id=8147448&tpg=1&ppg=1&sty=1&age=30#8147448
现在把制作过程及思路作详细说明。
实现灯的开关需要做到:
● 光源的显示和隐藏
● 阴影光照效果的控制
● 按钮开关的运动效果动画
光源的显示和隐藏
对于光源的显示和隐藏,最好的方法就是控制光源内在的属性如亮度,衰减程度等等。然而这些在场景编辑器(操作栏-->修改-->灯光面板)中提供的功能目前还没有在Neobook插件中提供命令和方法。那么我们需要另辟蹊径了。就是通过使用移动光源的办法!当不需要光源的时候,可以把它移到地面以下等影响不到场景的地方!把光源移到地面以下很简单,把Z坐标加一个负号即可。
从max中获得光源的位置坐标,看下图:
我们要控制光源Omni01的开关,max场景中的Omni02是背景灯(试想如果没有Omni02的话,关掉了Omni01,世界将漆黑一片!)
阴影光照效果的控制
我们可以采用烘培贴图的方法表现光照效果,用来区分光源关闭的情况。其中一个简便办法是制作出有光照和无光照两套模型使用Switch来控制交替显示它们。
无光照max截图:
有光照max截图:
按钮开关的运动效果动画。
按钮关:
按钮开:
按钮开关的动画实现比较简单,在max中可以做一个按钮的旋转关键帧动画,那么只需控制播放开始时间和结束时间即可。
在3DVRI for Neobook 插件中提供了命令:
设置TRANSFORM物体的ANIMATEPATH的开始时间和结束时间 "Box03" "0" "0.5" "[Return_Var]"
上面命令的意思是播放物体Box03的动画从0秒到0.5秒,0.5秒是动画帧数转换为时间的数值。
显然播放动画从0秒到0.5秒是正向播放开灯按钮开关动画,
那么播放动画从0.5秒到0秒就是反向播放关灯按钮开关动画了。
下面看一下详细的代码情况。
1. 对于开关灯要有一个全局变量控制。
在 书籍-->书籍属性-->动作-->启动 中可以看到变量声明。
DefineVar "[Status]" "Integer" "" "Global" "0"
2. 页面属性-->操作 的代码如下:
初始化VR窗口 "Rectangle1" "[Return_Var]"
装入VR场景 "[PubDir]102.ive" "[Return_Var]"
设置当前视图为给出序号相机 "0" "[Return_Var]"
自由旋转相机显示VR场景 "[Return_Var]"
.注释:在3DVRI 1083版本中,与以前版本不同的是:
.注释:漫游控制默认是关闭的,必须使用下面命令打开
打开漫游 "[Return_Var]"
.注释:场景载入之初,灯是开的
取得给出名称需要进行后续操作的Transform节点的地址指针 "Omni01" "[FastOutputLongOne]" "[Return_Var]"
设置给出地址指针的Transform节点的平移(Translate)信息 "[FastOutputLongOne]" "1.6" "-10" "163" "[Return_Var]"
.注释:场景载入之初,灯是开的,所以要显示 烘培过有光照效果的物体
设置给出名称switch开关物体指给出序号的单个子节点成开状态 "OSG_Switch01" "1" "[Return_Var]"
.注释:设置灯的开关按钮物体的初始状态
设置TRANSFORM物体的循环状态 "Box03" "0" "[Return_Var]"
设置TRANSFORM物体播放状态 "Box03" "1" "[Return_Var]"
.注释:开关按钮物体关联鼠标操作
物体关联鼠标形状 "Box03" "6" "[Return_Var]"
物体关联子程序 "Box03" "1" "SubBox03" "[Return_Var]"
设置鼠标位置的物体的检测功能状态 "1" "[Return_Var]"
3. 子程序SubBox03的代码:
在 书籍-->书籍属性-->动作-->子程序 或者 书籍-->子程序-->SubBox03 中可以看到子程序SubBox03。
:SubBox03
.注释:因为要控制灯光的位置,所以先取得光源Omni01的“地址“
取得给出名称需要进行后续操作的Transform节点的地址指针 "Omni01" "[FastOutputLongOne]" "[Return_Var]"
.注释:点击开关物体后,执行子程序到这里,就要设置按钮物体播放状态为开始播放
设置TRANSFORM物体播放状态 "Box03" "0" "[Return_Var]"
If "[Status]" "=" "1"
.注释:实现按钮开灯操作。
设置TRANSFORM物体的ANIMATEPATH的开始时间和结束时间 "Box03" "0.5" "0" "[Return_Var]"
.注释:输入光源位置:在max中光源的合适位置
设置给出地址指针的Transform节点的平移(Translate)信息 "[FastOutputLongOne]" "1.6" "-10" "163" "[Return_Var]"
.注释:显示影子
设置给出名称switch开关物体指给出序号的单个子节点成开状态 "OSG_Switch01" "1" "[Return_Var]"
SetVar "[Notice]" "灯开了!"
SetVar "[Status]" "0"
Else
.注释:实现按钮关灯操作。
设置TRANSFORM物体的ANIMATEPATH的开始时间和结束时间 "Box03" "0" "0.5" "[Return_Var]"
.注释:把光源移走,移到光线在场景中不起作用的地方,如地面以下
设置给出地址指针的Transform节点的平移(Translate)信息 "[FastOutputLongOne]" "-1.6" "-10" "-100" "[Return_Var]"
.注释:关掉影子
设置给出名称switch开关物体指给出序号的单个子节点成开状态 "OSG_Switch01" "0" "[Return_Var]"
SetVar "[Notice]" "灯关了!"
SetVar "[Status]" "1"
EndIf
Return
相关max文件,IVE文件和Neobook工程文件下载:
完成。
|