A feature that can make your models much more lively is animations. In our viewer, animations can be defined by using AnimationData. An AnimationData consists of one or multiple AnimationTracks. The AnimationTracks define which object moves how. The AnimationData is a wrapper around multiple AnimationTracks to execute them together. In this tutorial, we’ll show you how to do that, and what is possible.


Simple Example

In out first, simple example, we just want to move our whole model to one side and back. We start with the simple example and now create an AnimationTrack array and an AnimationData item. The AnimationData specifies keyframes (in seconds) at which a state is defined. In our example, we start at second 0 at the position [0,0,0], and move in the next 2.5 seconds to position [25,0,0], from second 2.5 to second 5 we move from that position back to the origin. As a node the current session node is defined. As a path the type of animation is used, in our case translation. And finally, we define the interpolation as linear. The created data item has to be added to the scene now. Additionally, we want the animation to loop. Therefore, we set the according values.

Note: It does not matter where you add this AnimationData. The nodes that are specified by the tracks will be animated. It does make sense to store this data in the corresponding session node, as customization calls will remove that node, and therefore invalid nodes in the tracks will not be used.

In the example below we can see the model moving the specified animation sequence in repeat.


Advanced Example

In our next example, we want to move separate parts of the model. We also want to use the other types of animations and want to build them up consecutively. First, we want our door to move, then rotate, and then move back. In our first AnimationTrack we create the translation. Note that we stay at the position [14.5,0,0] for 5 seconds (from 2.5 to 7.5). In our second AnimationTrack we rotate the object around the z-Axis for 180 degrees. This results in the animation below.


Additionally, we now also want to scale some of our geometry. We create new AnimationTracks and specify different scaling for three of the horizontal boards. In the example below, you can see how both of these animations work at the same time.


Global Access & GLTF Animations

It is very easy to access all animations that are currently active. Just call viewer.animations to get all current animations in array form. There you can start/pause/stop them and change if they should be repeated or not. Animations that are defined in a glTF v2 can be accessed exactly in the same way.