import { Vector3, Euler, Matrix4 } from "threejs-math";
import { RotateTransform, Transform } from "./internal";
/**
* performs the calculation required for the lookAt
* property of a camera resource. Determines the
* required angles of two rotations, the first about
* the x axis and the second about the y axis, which will
* rotate the default camera direction (0,0,-1) into the
* direction of the input arguments
*
* Result of calculation is returned as a instance of EulerAngle from the
* threejs-math library. The "axes order" of the EulerAngle is "YXZ": The
* three-js library uses body-fixed axes to represent EulerAngles, which reverse
* the ordering of the "relative rotation" algorithm described in the
* draft 3d api.

* @param direction A vector interpreted as a direction. Client code
*        responsible for not passing a 0-length vector, else a

*
* @returns threejs-math.EulerAngle instance
**/
export declare function cameraRelativeRotation(direction: Vector3): Euler;
/**
 * Evaluates the rotation required to transform a directional light
 * or spot ling, which in iiif 3D spec
 * have an initial direction in the -Y direction, to a direction
 * along the input argument
 *
 * TODO : expand on this documentation taking into account the
 *        implied specification that RotateTransform instances
 *        are to be interpreted as an Euler angle definition of
 *        the rotation
 *
 * @param direction A vector interpreted as a direction. Client code
 *        responsible for not passing a 0-length vector, else a
 *
 * @returns threejs-math.EulerAngle instance
 **/
export declare function lightRelativeRotation(direction: Vector3): Euler;
/**
* Implements the convention that the 3 component values for the RotateTranform
* cass (properties  x,y,z) are to be interpreted as Euler angles in the intrinsic XYZ
* order
* @param transform : A object with a Rotation member object, properties x,y,z

*
* @returns threejs-math.EulerAngle instance. From this  threejs-math functionsa
* allow conversion to other rotation representations.
**/
export declare function eulerFromRotateTransform(transform: RotateTransform): Euler;
/**
 * Given an array of Transform instances, returns a single Matrix4
 * instance that represents the cumulative effect of the transforms
 * in the order they appear in the array.
 *
 * @param transforms An array of Transform instances
 *
 * @returns A Matrix4 instance representing the cumulative effect of the transforms
 **/
export declare function combineTransformsToMatrix(transforms: Transform[]): Matrix4;
export type TransformSet = {
    translation: Vector3;
    rotation: Euler;
    scale: Vector3;
};
export declare function combineTransformsToTRS(transforms: Transform[]): TransformSet;
export declare function decomposeMatrix(matrix: Matrix4): {
    translation: Vector3;
    rotation: Euler;
    scale: Vector3;
};
