Clip.kl

Types

Clip (object)

The clip stores a collection of track sets, each one representing a complex values such as a Vec3 or Xfo.

A Clip is typically used to store all the animation for a character action. Multiple clips can then store a library of animation data. The Clips can be evaluated, to generate ClipValues which can be blended together and used to drive the pose of a character.

参考

TrackSet

/*
** Example: clip.kl
*/

require Animation;

operator entry(){

  //////////////////////////////////
  // Generate a clip using each type of track set. 
  Clip clip('MyClip');
  clip.addTrackSet('ScalarTrackSet', Color(1.0,0.0,0.0), 1.2, 0);
  clip.addTrackSet('Vec2TrackSet', Vec2(0.4, 1.2), 0);
  clip.addTrackSet('Vec3TrackSet', Vec3(0.4, 1.2, 2.4), 0);
  clip.addTrackSet('Vec4TrackSet', Vec4(0.4, 1.2, 2.4, 5.7), 0);
  clip.addTrackSet('QuatTrackSet', Quat(), 0);
  clip.addTrackSet('EulerTrackSet', Euler(0.4, 1.2, 6.8, RotationOrder('zyx')), 0);
  clip.addTrackSet('XfoTrackSet', Xfo(), 0);

  UInt32 seed = 5467;
  UInt32 offset = 0;
  String trackSetNames[] = clip.getTrackSetNames();
  for(Integer i=0; i<trackSetNames.size(); i++) {  
    report('trackSet:'+trackSetNames[i]);
    KeyframeTrackSet trackSet = clip.getTrackSet(trackSetNames[i]);
    String trackNames[] = trackSet.getTrackNames();
    for(Integer j=0; j<trackNames.size(); j++) {
      report('  track:'+trackNames[j]);
      KeyframeTrack track = trackSet.getTrack(trackNames[j]);
      track.addKey(Keyframe(0.0, mathRandomScalar(seed, ++offset), Vec2(0.0, 0.0), Vec2(0.333, 0.0)));
      track.addKey(Keyframe(2.0, mathRandomScalar(seed, ++offset), Vec2(-0.5, 25.0), Vec2(0.5, 25.0)));
      track.addKey(Keyframe(4.0, mathRandomScalar(seed, ++offset), Vec2(-0.333, 0.0), Vec2(0.333, 0.0)));
    }
  }

  //////////////////////////////////
  // Evalaute the clip over time to get the clipValues. 
  for(Integer t=0; t<5; t++) {  
    ClipValues clipValues = clip.evaluate((Scalar(t)/5.0));
    report(clipValues.getDesc());
  }
}

/*
** Output:

trackSet:ScalarTrackSet
  track:ScalarTrackSet
trackSet:Vec2TrackSet
  track:x
  track:y
trackSet:Vec3TrackSet
  track:x
  track:y
  track:z
trackSet:Vec4TrackSet
  track:x
  track:y
  track:z
  track:t
trackSet:QuatTrackSet
  track:v.x
  track:v.y
  track:v.z
  track:w
trackSet:EulerTrackSet
  track:euler.x
  track:euler.y
  track:euler.z
trackSet:XfoTrackSet
ClipValues:{ 
  ScalarTrackSet=+0.439575 
  Vec2TrackSet={x:+1.17588e-3,y:+0.846923} 
  Vec3TrackSet={x:+0.951416,y:+0.729003,z:+0.061187} 
  Vec4TrackSet={x:+0.092971,y:+0.381774,z:+0.863403,t:+0.494201} 
  QuatTrackSet={v:{x:+0.243927,y:+0.243988,z:+0.663818},w:+0.663574} 
  EulerTrackSet={v:{x:+0.051864,y:+0.332763,z:+0.228302},w:+0.913452} 
  XfoTrackSet={tr:{x:+0.0,y:+0.0,z:+0.0},ori:{v:{x:+0.0,y:+0.0,z:+0.0},w:+1.0},sc:{x:+1.0,y:+1.0,z:+1.0}} 
}
ClipValues:{ 
  ScalarTrackSet=-0.290832 
  Vec2TrackSet={x:-0.718505,y:+0.0941} 
  Vec3TrackSet={x:+0.18634,y:-2.833557e-2,z:-0.660034} 
  Vec4TrackSet={x:-0.638671,y:-0.352661,z:+0.103652,t:-0.232086} 
  QuatTrackSet={v:{x:-0.695312,y:-0.711547,z:+0.087371},w:+0.052406} 
  EulerTrackSet={v:{x:-0.210479,y:-0.048934,z:-0.092727},w:+0.971923} 
  XfoTrackSet={tr:{x:+0.0,y:+0.0,z:+0.0},ori:{v:{x:+0.0,y:+0.0,z:+0.0},w:+1.0},sc:{x:+1.0,y:+1.0,z:+1.0}} 
}
ClipValues:{ 
  ScalarTrackSet=-2.32666 
  Vec2TrackSet={x:-2.722168,y:-2.008789} 
  Vec3TrackSet={x:-1.95288,y:-2.144531,z:-2.668457} 
  Vec4TrackSet={x:-2.678222,y:-2.400879,z:-2.020019,t:-2.255371} 
  QuatTrackSet={v:{x:-0.540039,y:-0.549072,z:-0.441528},w:-0.460388} 
  EulerTrackSet={v:{x:-0.454589,y:+0.230987,z:-0.495239},w:-0.703369} 
  XfoTrackSet={tr:{x:+0.0,y:+0.0,z:+0.0},ori:{v:{x:+0.0,y:+0.0,z:+0.0},w:+1.0},sc:{x:+1.0,y:+1.0,z:+1.0}} 
}
ClipValues:{ 
  ScalarTrackSet=-5.146484 
  Vec2TrackSet={x:-5.492187,y:-4.93164} 
  Vec3TrackSet={x:-4.932617,y:-5.088867,z:-5.445312} 
  Vec4TrackSet={x:-5.502929,y:-5.239258,z:-4.975586,t:-5.055664} 
  QuatTrackSet={v:{x:-0.51184,y:-0.520385,z:-0.474243},w:-0.492309} 
  EulerTrackSet={v:{x:-0.136779,y:-0.60437,z:-0.166961},w:-0.766967} 
  XfoTrackSet={tr:{x:+0.0,y:+0.0,z:+0.0},ori:{v:{x:+0.0,y:+0.0,z:+0.0},w:+1.0},sc:{x:+1.0,y:+1.0,z:+1.0}} 
}
ClipValues:{ 
  ScalarTrackSet=-7.921875 
  Vec2TrackSet={x:-8.208984,y:-7.831054} 
  Vec3TrackSet={x:-7.899414,y:-8.011719,z:-8.169922} 
  Vec4TrackSet={x:-8.285156,y:-8.037109,z:-7.912109,t:-7.808594} 
  QuatTrackSet={v:{x:-0.502563,y:-0.511718,z:-0.483093},w:-0.502197} 
  EulerTrackSet={v:{x:+0.695556,y:-1.838684e-2,z:+0.684814},w:+0.216461} 
  XfoTrackSet={tr:{x:+0.0,y:+0.0,z:+0.0},ori:{v:{x:+0.0,y:+0.0,z:+0.0},w:+1.0},sc:{x:+1.0,y:+1.0,z:+1.0}} 
}

*/

Members

String name  
ITrackSet[String] trackSets  
Integer[][] keyIndices  

Methods

  Clip ( in Clip other )
  Clip ( in String name )
  Clip ()
  addTrackSet ! ( in ITrackSet trackSet )
ITrackSet addTrackSet ! ( in String name, in Color color, in Scalar defaultValue, in UInt32 flags )
ITrackSet addTrackSet ! ( in String name, in Euler defaultValue, in UInt32 flags )
  addTrackSet ! ( in String name, in ITrackSet trackSet )
ITrackSet addTrackSet ! ( in String name, in Quat defaultValue, in UInt32 flags )
ITrackSet addTrackSet ! ( in String name, in Vec2 defaultValue, in UInt32 flags )
ITrackSet addTrackSet ! ( in String name, in Vec3 defaultValue, in UInt32 flags )
ITrackSet addTrackSet ! ( in String name, in Vec4 defaultValue, in UInt32 flags )
ITrackSet addTrackSet ! ( in String name, in Xfo defaultValue, in UInt32 flags )
Clip clone ? ()
IClipValues evaluate ! ( in Scalar time )
IClipValues evaluate ? ( in Scalar time, io Integer keyIndices[][] )
String getDesc ? ( in String indent )
String getDesc ? ()
String getName ? ()
UInt32 getNumTrackSets ? ()
Vec2 getTimeRange ? ()
ITrackSet getTrackSet ? ( in String name )
String[] getTrackSetNames ? ()
Boolean hasTrackSet ? ( in String name )
  setTrackSet ! ( in String name, in ITrackSet trackSet )