下一页 1 2
witch结点将使场景具有更多的灵活性和真实感,它的目的在于容许附加多个子结点,并容许同时运行这些结点。当然也可以使用TouchScense结点同时定义多条路线,但是这样会使程序非常繁杂,在多个形状变化时,几乎没有人使用这种方法。
在场景中有一个waiter,当用户接近点击他,waiter做出一个向用户问候的姿式。完成场景中这样一个设计,首先在三维软件中做出waiter的两个姿式,一个是用户没有点击时的姿式Detail保存为Detail.wrl,和一个waiter问候的姿式Hello保存为Hello.wrl。当然理论上Switch结点是支持无限任意姿式的,只需要你预先定义几种模型,让Switch结点选择在什么时候使用什么样的姿式就行了,只是在这个例子中,我们使用了两个姿式罢了。我们将两个姿式模型定义在一个Switch结点中,在用户点击之后,通过Script结点的setAgentImage字段传递给Java程序,再由Java程序决定用什么姿式模型,然后再将选择的结果返回到Script结点的WhichChioce中,告之Switch结点要使用的模型显示出来。
#VRML V2.0 utf8
Transform{
children[
DEF AGENT_SWITCH Switch{
whichChoice 0
choice[
# normal posture
Inline{url "Detailed.wrl"},
# hello posture
Inline{url "Hello.wrl"}
]
},
DEF AGENT_TOUCH TouchSensor{}
]
}
DEF AGENT_SCRIPT Script{
url "SwitchAgent.class"
eventIn SFTime touchTime
eventOut SFInt32 setAgentImage
}
ROUTE AGENT_TOUCH.touchTime TO AGENT_SCRIPT.touchTime
ROUTE AGENT_SCRIPT.setAgentImage TO AGENT_SWITCH.set_whichChoice