用VRML美化你的虚拟网上世界(中级)
内容
一、造型的动画
一、造型的动画
动画和时间
任何一个动画都要有两个要素,一个是控制动画回放的时钟,一个是对动画过程中物体如何改变的描述。我们可以使用TimeSensor节点来创建一个时钟,可以用PositionInterpolater和OrientationInterolator节点来描述物体在动画过程中的变化。这两个节点根据时钟来的信息,从你提供的列表中选择适当的位置和方向。在动画过程中新的位置和方向被选择和输出。可以用ROUTE语法使用一条路径将TimerSensor节点的输出绑定到内插器PositionInterpolater和OrientationInterolator节点上。然后用另一条路径将内插器节点的输出连接到Transform节点的输入上。
TimerSensor节点
TimerSensor
{
enabled
TRUE #指定时间传感器的打开或关上
startTime
0.0 #指出开始通过eventOut输出事件的时间
stopTime
0.0 #指定时间传感器停止输出事件的时间
cycleInterval 1.0
#指定时间传感器从0.0时刻到1.0时刻的间隔时间长度
loop
FALSE #指定传感器是否循环
isActive
#当时间传感器被激活并输出事件,该域输出TRUE
time
#只要时间传感器输出事件,该域不断输出绝对时间
cycleTime
#在每一次循环的开始,该域都会输出一个绝对事件时间值
fraction_changed
#当时间传感器循环时,该域输出一个浮点时刻值
}
loop值 |
startTime、stopTime和cycleInterval之间的关系 |
效果 |
TRUE |
stopTime≤startTime |
永远运行 |
TRUE |
startTime<stopTime |
运行到停止时间为止 |
FALSE |
stopTime≤startTime |
只运行一次,停止于startTime+cycleInterval |
FALSE |
startTime<(startTime+cycleInterval)≤stopTime |
只运行一次,停止于startTime+cycleInterval |
FALSE |
startTime<stopTime<(startTime+cycleInterval) |
运行不到一个循环就在stopTime停止 |
PositionInterpolator节点(移动)
PositionInterpolator
{
key
[] #指定一个浮点时刻关键值列表,它要按递增列出。
keyValue []
#指定一个关键位置的列表,每一个关键位置都是一组X,Y和Z浮点值组成的三维坐标或平移距离,它和时刻关键值要一一对应。
set_fraction
#通常情况下这个域是和TimeSensor的fraction_changed捆绑在一起的
value_changed
#新计算出来的位置通过该域输出,通常和Transform节点的set_translation捆绑。
}
OrientationInterpolator节点(旋转)
OrientationInterpolator
{
key
[] #指定一个浮点时刻关键值列表,它要按递增列出。
keyValue []
#指定一个关键位置的列表,每一个关键位置都是一组X,Y和Z浮点值组成的三维坐标加上一个旋转角度,它和时刻关键值要一一对应。
set_fraction
#通常情况下这个域是和TimeSensor的fraction_changed捆绑在一起的
value_changed
#新计算出来的旋转的位置通过该域输出,通常和Transform节点的set_rotation捆绑。
}
ColorInterpolator节点(颜色)
ColorInterpolator
{
key
[] #指定一个浮点时刻关键值列表,它要按递增列出。
keyValue []
#指定一个关键位置的列表,每一个关键位置都是一组R、G、B值组成,它和时刻关键值要一一对应。
set_fraction
#通常情况下这个域是和TimeSensor的fraction_changed捆绑在一起的
value_changed
#新计算出来的颜色通过该域输出,通常和Material节点的set_emissiveColor捆绑。
}
ScalarInterpolator节点(透明度)
ScalarInterpolator
{
key
[] #指定一个浮点时刻关键值列表,它要按递增列出。
keyValue []
#指定一个关键位置的列表,每一个关键位置都是一个0.0-1.0之间的浮点数,它和时刻关键值要一一对应。
set_fraction
#通常情况下这个域是和TimeSensor的fraction_changed捆绑在一起的
value_changed
#新计算出来的透明度通过该域输出,通常和Material节点的set_transparency捆绑。
}例子:
1、移动的BOX
#VRML V2.0 utf8
Group {
children [
#moving box
DEF Cube Transform {
children Shape {
appearance
Appearance {
material Material {}
}
geometry
Box{ size 1.0 1.0 1.0}
}
},
#Animation clock
DEF Clock TimeSensor {
cycleInterval 4.0
loop TRUE
},
#Animation path
DEF CubePath PositionInterpolator
{
key [
0.00,0.11,0.17,0.22,
0.33,0.44,0.50,0.55,
0.66,0.77,0.83,0.88,
0.99
]
keyValue [
0.0 0.0
0.0,1.0 1.96 1.0,
1.5 2.21
1.5,2.0 1.96 2.0,
3.0 0.0
3.0,2.0 1.96 3.0,
1.5 2.21
3.0,1.0 1.96 3.0,
0.0 0.0
3.0,0.0 1.96 2.0,
0.0 2.21
1.5,0.0 1.96 1.0,
0.0 0.0
0.0
]
}
]
}
ROUTE Clock.fraction_changed TO CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
请看效果
例子2、旋转的柱体
#VRML V2.0 utf8
Group {
children [
#rotating cyl
DEF Column Transform {
rotation 0.0 0.0
1.0 0.0
children Shape {
appearance
Appearance {
material Material {}
}
geometry
Cylinder{
height 1.0
radius 0.2
}
}
},
#Animation clock
DEF Clock TimeSensor {
cycleInterval 4.0
loop TRUE
},
#Animation path
DEF ColumnPath OrientationInterpolator
{
key [ 0.0,0.5,1.0
]
keyValue [
1.0 0.0
1.0 0.0,
1.0 0.0
1.0 3.14,
1.0 0.0
1.0 6.28
]
}
]
}
ROUTE Clock.fraction_changed TO ColumnPath.set_fraction
ROUTE ColumnPath.value_changed TO Column.set_rotation
请看效果
例子3、缩放的球体
例子4、三个闪烁的圆球
例子5、透明度的变化
#VRML V2.0 utf8
Group {
children [
#Station Shapes
Shape {
appearance Appearance {
material DEF BallColor Material
{
diffuseColor
1.0 0.0 0.0
}
}
geometry Sphere { }
},
Shape {
appearance Appearance {
material Material {
diffuseColor
0.5 0.25 1.0
}
}
geometry Cylinder {
radius 2.0
height
0.05
}
},
Shape {
appearance Appearance {
material Material {
diffuseColor
0.75 0.0 1.0
}
}
geometry Cylinder {
radius 0.15
height
5.0
}
},
# Animation clock
DEF Clock TimeSensor {
cycleInterval 4.0
loop TRUE
},
# Animation path
DEF TransparencyPath ScalarInterpolator
{
key [ 0.0 0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9 1.0 ]
keyValue [1.0 0.8 0.6 0.4 0.2
0.0 0.2 0.4 0.6 0.8 1.0 ]
}
]
}
ROUTE Clock.fraction_changed TO TransparencyPath.set_fraction
ROUTE TransparencyPath.value_changed TO BallColor.set_transparency
请看效果
返回页首
未完待续……
|