sig
  type t
  module Control_point :
    sig
      type t
      external create :
        Osg.Vec3.t ->
        Osg.Quat.t -> Osg.Vec3.t -> Osg.Animation_path.Control_point.t
        = "animation_path_control_point_create"
      external get_matrix :
        Osg.Animation_path.Control_point.t -> Osg.Matrix.t
        = "animation_path_control_point_get_matrix"
      external get_inverse :
        Osg.Animation_path.Control_point.t -> Osg.Matrix.t
        = "animation_path_control_point_get_inverse"
    end
  type loop_mode = SWING | LOOP | NO_LOOPING
  external create' : unit -> Osg.Animation_path.t = "animation_path_create"
  external insert :
    Osg.Animation_path.t ->
    float -> Osg.Animation_path.Control_point.t -> unit
    = "animation_path_insert"
  external set_loop_mode :
    Osg.Animation_path.t -> Osg.Animation_path.loop_mode -> unit
    = "animation_path_set_loop_mode"
  external get_interpolated_control_point :
    Osg.Animation_path.t -> float -> Osg.Animation_path.Control_point.t
    = "animation_path_get_interpolated_control_point"
  val create :
    ?loop_mode:Osg.Animation_path.loop_mode ->
    control_points:(float * Osg.Animation_path.Control_point.t) list ->
    Osg.Animation_path.t
end