' '

Difficulty

3

Prerequisites

animations/easing-library

Reading material

animations/basics

design/animations

1. Wobble Wobble

The wobble easing has two parameters:

  • The number of wobbles.

  • The amplitude of the wobbles.

Create files math/functions/easing/wobble-easing-function.cpp/.h. Define a wobble factory function

EasingFunction wobble(unsigned nwobbles, double wobble_amplitude);

Implement wobble such that you get the results shown below.

Tip

Use linear-easing-function.h/.cpp as a guide.

2. Evaluation

def scene_at(now)
{
  var camera = Cameras.perspective( [ "eye": pos(0, 0, 20),
                                      "look_at": pos(0,0,0) ] )

  var nwobbles = 1
  var wobble_amplitude = 0.5
  var easing = Easing.wobble(nwobbles, wobble_amplitude)

  var t = Animations.animate( -5, 5, seconds(3) )
  var x = t[now]
  var y = Animations.ease(t, easing)[now]
  var sphere_position = pos(x, y, 0)
  var root = translate(sphere_position - pos(0, 0, 0), sphere())

  var lights = [ ]

  create_scene(camera, root, lights)
}

var raytracer   = Raytracers.v0()
var renderer    = Renderers.standard( [ "width": 500,
                                        "height": 500,
                                        "sampler": Samplers.single(),
                                        "ray_tracer": raytracer ] )

pipeline( scene_animation(scene_at, seconds(3)),
          [ Pipeline.animation(30),
            Pipeline.renderer(renderer),
            Pipeline.studio() ] )
def scene_at(now)
{
  var camera = Cameras.perspective( [ "eye": pos(0, 0, 20),
                                      "look_at": pos(0,0,0) ] )

  var nwobbles = 5
  var wobble_amplitude = 0.2
  var easing = Easing.wobble(nwobbles, wobble_amplitude)

  var t = Animations.animate( -5, 5, seconds(3) )
  var x = t[now]
  var y = Animations.ease(t, easing)[now]
  var sphere_position = pos(x, y, 0)
  var root = translate(sphere_position - pos(0, 0, 0), sphere())

  var lights = [ ]

  create_scene(camera, root, lights)
}

var raytracer   = Raytracers.v0()
var renderer    = Renderers.standard( [ "width": 500,
                                        "height": 500,
                                        "sampler": Samplers.single(),
                                        "ray_tracer": raytracer ] )

pipeline( scene_animation(scene_at, seconds(3)),
          [ Pipeline.animation(30),
            Pipeline.renderer(renderer),
            Pipeline.studio() ] )
def scene_at(now)
{
  var camera = Cameras.perspective( [ "eye": pos(0, 0, 20),
                                      "look_at": pos(0,0,0) ] )

  var nwobbles = 1
  var wobble_amplitude = 0.5
  var easing = Easing.wobble(nwobbles, wobble_amplitude)

  var t = Animations.animate( -5, 5, seconds(3) )
  var x = t[now]
  var y = Animations.ease(t, easing)[now]
  var sphere_position = pos(x, y, 0)
  var root = translate(sphere_position - pos(0, 0, 0), sphere())

  var lights = [ ]

  create_scene(camera, root, lights)
}

var raytracer   = Raytracers.v0()
var renderer    = Renderers.standard( [ "width": 500,
                                        "height": 500,
                                        "sampler": Samplers.single(),
                                        "ray_tracer": raytracer ] )

pipeline( scene_animation(scene_at, seconds(3)),
          [ Pipeline.animation(30),
            Pipeline.renderer(renderer),
            Pipeline.studio() ] )