This is an old revision of the document!


Animations

If you load a model from DAE or X3D with embedded animations, Gorilla3D will automatically load and add all animations to the model.

Animations are handled by the TGorillaAnimationManager inside of a TGorillaModel component. By the animation manager you are allowed to browse through all available animations and to playback or stop those.

Post-Loading of animations

In case you separated the model data from animations, you can load animations after loading the model.

Form1.pas
  GorillaModel1.AddAnimationFromFile('Bellydancing.dae', GORILLA_ANIMATION_CACHING_DEFAULT);

This is only supported for DAE files!

Playing animation

Play/Stop current animation

The “Current” property of the AnimationManager represents the currently active animation or if not set yet, it will automatically select the first animation from the internal animation map.

You can simply start and stop animations by the provided methods.

Form1.pas
  GorillaModel1.AnimationManager.Current.Start();
Form1.pas
  GorillaModel1.AnimationManager.Current.Stop();

Iterating through animations

To iterate through the animations list and playback you can use the provided methods PlayNextAnimation() and PlayPreviousAnimation().

Form1.pas
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if not Assigned(GorillaModel1) then
    Exit;
 
  if (KeyChar = 'e') then
  begin
    // next animation if exists
    if (GorillaModel1.AnimationManager.Animations.Count > 0) then
    begin
      GorillaModel1.AnimationManager.PlayNextAnimation();
    end;
  end
  else if (KeyChar = 'q') then
  begin
    // previous animation if exists
    if (GorillaModel1.AnimationManager.Animations.Count > 0) then
    begin
      GorillaModel1.AnimationManager.PlayPreviousAnimation();
    end;
  end;
end;

Playback by animation name

At the moment animation names are set by the order of adding. So the first animation is called “Animation1”, the second “Animation2” and so on.

You are allowed to browse an animation by its name, by using the provided hashmap component inside of the AnimationManager.

Form1.pas
procedure TForm1.Playback(const AName : String);
var LAnim : TGorillaAnimation
begin
  if not GorillaModel1.AnimationManager.Animations.TryGetValue(AName, LAnim) then
    LAnim := nil;
 
  if Assigned(LAnim) then
    LAnim.Start();
end;

Animation caching

To animate models with a large number of vertices is very slow. Also using the same animated model multiple times is also extremely slow. Due to those performance needs, Gorilla3D offers some caching techniques for model animations.

As you've seen in the previous examples for loading a model, there was a supplied parameter for animation caching.

Next step: Materials