用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
请看效果

返回页首

未完待续……

CopyRight © 2003