Animation
Animating content in your scenes
TODO:
- Broken developer.viromedia.com links
Animations provide useful feedback to users and add "life" to an application. Viro enables powerful and simple animations on all components.
Animation Transactions
AnimationTransaction is the simplest mechanism for animating properties. To use this API:
- Create and configure an AnimationTransaction using static methods
- Invoke the setters of the properties you wish to change
- Commit the AnimationTransaction
Below is a simple example that animates a Node to a new position.
AnimationTransaction.begin();
AnimationTransaction.setAnimationDuration(5000);
node.setPosition(new Vector(-2, 2.5f, -3));
AnimationTransaction.commit();
You can also perform more complex animations, like changing the texture of a Material while rotating a Node. The initial texture will crossfade over to the new texture. We do this in the example below while using an "Ease Out" curve to decelerate the animation as it nears its end.
AnimationTransaction.begin();
AnimationTransaction.setAnimationDuration(5000);
AnimationTransaction.setTimingFunction(AnimationTimingFunction.EaseOut);
node.setRotation(new Vector(0, M_PI_2, 0));
node.getGeometry().getMaterials().get(0).setDiffuseTexture(texture);
AnimationTransaction.commit();
Finally, you can also chain animations or respond to the end of an animation by using an AnimationTransaction.Listener. In the snippet below, we move the position of a Node then, once that animation completes, we rotate the Node.
AnimationTransaction.begin();
AnimationTransaction.setAnimationDuration(5000);
AnimationTransaction.setFinishCallback(new AnimationTransaction.Listener() {
public void onFinished(final AnimationTransaction transaction) {
AnimationTransaction.begin();
node.setRotation(new Vector(0, M_PI_2, 0));
AnimationTransaction.commit();
}
});
node.setPosition(new Vector(-2, 2.5f, -3));
AnimationTransaction.commit();
The function is invoked after the animation has ended. If the animation is looping, the function is invoked at the end of every loop.
Animatable Properties
The properties that can be animated are:
Node
Node.setPosition()
Node.setRotation()
Node.setScale()
Node.setOpacity()
Material
Material.setShininess()
Material.setDiffuseColor()
Material.setDiffuseTexture()
Material.setSpecularTexture()
Material.setNormalMap()
Light
Light.setIntensity()
Light.setColor()
Light.setTemperature()
DirectionalLight.setDirection()
OmniLight.setPosition()
OmniLight.setAttenuationStartDistance()
OmniLight.setAttenuationEndDistance()
Spotlight.setPosition()
Spotlight.setDirection()
Spotlight.setAttenuationStartDistance()
Spotlight.setAttenuationEndDistance()
Spotlight.setInnerAngle()
Spotlight.setOuterAngle()
Box
All setters
Sphere
All setters
Skeletal Animation
Skeletal animation is a technique for animating complex geometries; for example, to make a humanoid character walk. These animations are typically authored in 3D graphics software, and exported as FBX files. Viro has full support for these animations. For more information, please see the 3D Objects guide.
Updated about 3 years ago