sig
  type t
  external create : unit -> Osg.Matrix.t = "matrix_create"
  external to_array : Osg.Matrix.t -> float array array = "matrix_to_array"
  val to_tuple :
    Osg.Matrix.t ->
    (float * float * float * float) * (float * float * float * float) *
    (float * float * float * float) * (float * float * float * float)
  external pre_mult3 : Osg.Vec3.t -> Osg.Matrix.t -> Osg.Vec3.t
    = "matrix_pre_mult3"
  external post_mult3 : Osg.Matrix.t -> Osg.Vec3.t -> Osg.Vec3.t
    = "matrix_post_mult3"
  external pre_mult4 : Osg.Vec4.t -> Osg.Matrix.t -> Osg.Vec4.t
    = "matrix_pre_mult4"
  external post_mult4 : Osg.Matrix.t -> Osg.Vec4.t -> Osg.Vec4.t
    = "matrix_post_mult4"
  external mult : Osg.Matrix.t -> Osg.Matrix.t -> Osg.Matrix.t
    = "matrix_mult"
  external inverse : Osg.Matrix.t -> Osg.Matrix.t = "matrix_inverse"
  external translate : float -> float -> float -> Osg.Matrix.t
    = "matrix_translate"
  external translate_vec3 : Osg.Vec3.t -> Osg.Matrix.t
    = "matrix_translate_vec3"
  external scale : float -> float -> float -> Osg.Matrix.t = "matrix_scale"
  external scale_vec3 : Osg.Vec3.t -> Osg.Matrix.t = "matrix_scale_vec3"
  external rotate : float -> float -> float -> float -> Osg.Matrix.t
    = "matrix_rotate"
  external rotate_vec3 : float -> Osg.Vec3.t -> Osg.Matrix.t
    = "matrix_rotate_vec3"
  external rotate_quat : Osg.Quat.t -> Osg.Matrix.t = "matrix_rotate_quat"
  external rotate_from_to : Osg.Vec3.t -> Osg.Vec3.t -> Osg.Matrix.t
    = "matrix_rotate_from_to"
  external frustum :
    float -> float -> float -> float -> float -> float -> Osg.Matrix.t
    = "matrix_frustum_bytecode" "matrix_frustum_native"
  external look_at : Osg.Vec3.t -> Osg.Vec3.t -> Osg.Vec3.t -> Osg.Matrix.t
    = "matrix_look_at"
  external ortho :
    float -> float -> float -> float -> float -> float -> Osg.Matrix.t
    = "matrix_ortho_bytecode" "matrix_ortho_native"
  external ortho_2d : float -> float -> float -> float -> Osg.Matrix.t
    = "matrix_ortho_2d"
  external get_rotate : Osg.Matrix.t -> Osg.Quat.t = "matrix_get_rotate"
  external get_trans : Osg.Matrix.t -> Osg.Vec3.t = "matrix_get_trans"
  external get_scale : Osg.Matrix.t -> Osg.Vec3.t = "matrix_get_scale"
  external set_rotate : Osg.Matrix.t -> Osg.Quat.t -> unit
    = "matrix_set_rotate"
  external set_trans : Osg.Matrix.t -> Osg.Vec3.t -> unit
    = "matrix_set_trans"
end