VRML/X3D中如何按照设定好的路径自动漫游或行走?且如果控制只走一遍?
今天查了很多资料,总结出来这个算是比较简单的方案。
主要用到TimeSensor,TouchSensor,PositionInterpolator,OrientationInterpolator。
示例:
DEF pi PositionInterpolator {
key [ 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
]
keyValue [
9 1.5 2 ,
9 1.5 4 ,
20 1.5 15 ,
22 1.5 15 ,
23 1.5 16 ,
42 1.5 16 ,
43 1.5 17 ,
43 1.5 31 ,
42 1.5 32 ,
42 1.5 38 ,
41 1.5 39 ,
]
}
DEF oi OrientationInterpolator {
key [ 0 0.05 0.25 0.3 0.35 0.55 0.6 0.75 0.8 0.95 1]
keyValue [
0 1 0 3.14,
0 1 0 4,
0 1 0 -1.57,
0 1 0 -1.57,
0 1 0 -1.57,
0 1 0 -2.8,
0 1 0 3.14,
0 1 0 3.14,
0 1 0 3.14,
0 1 0 3.14,
0 1 0 3.14]
}
DEF ts TimeSensor {
cycleInterval 33
loop FALSE
}
DEF tct TouchSensor {}
ROUTE tct.touchTime TO ts.startTime
ROUTE ts.fraction_changed TO pi.set_fraction
#ROUTE pi.value_changed TO tr.set_translation
ROUTE pi.value_changed TO CVP.set_position
ROUTE ts.fraction_changed TO oi.set_fraction
ROUTE oi.value_changed TO CVP.set_orientation
当loop为FALSE时,需要自己启动TimeSensor,这时借助TouchSensor来传递ts的startTime来启动。
这样就每当点击场景中物体时,就会激发一次动画(即路径行走一遍)。
如果把loop设置为TRUE那就不需要TouchSensor来启动了,会自发启动并且一直循环下去。