import { Mat4 } from './Mat4'; import { Quat } from './Quat'; import { Camera } from '../core/cameras/Camera'; /** * Really basic 3D vector class used for vector calculations. * @see https://github.com/mrdoob/three.js/blob/dev/src/math/Vector3.js * @see http://glmatrix.net/docs/vec3.js.html */ export declare class Vec3 { /** The type of the {@link Vec3}. */ type: string; /** X component of our {@link Vec3}. */ private _x; /** Y component of our {@link Vec3}. */ private _y; /** Z component of our {@link Vec3}. */ private _z; /** function assigned to the {@link onChange} callback. */ _onChangeCallback?(): void; /** * Vec3 constructor * @param x - X component of our {@link Vec3}. * @param y - Y component of our {@link Vec3}. * @param z - Z component of our {@link Vec3}. */ constructor(x?: number, y?: number, z?: number); /** * Get the X component of the {@link Vec3}. */ get x(): number; /** * Set the X component of the {@link Vec3}. * Can trigger {@link onChange} callback. * @param value - X component to set. */ set x(value: number); /** * Get the Y component of the {@link Vec3}. */ get y(): number; /** * Set the Y component of the {@link Vec3}. * Can trigger {@link onChange} callback. * @param value - Y component to set. */ set y(value: number); /** * Get the Z component of the {@link Vec3}. */ get z(): number; /** * Set the Z component of the {@link Vec3}. * Can trigger {@link onChange} callback. * @param value - Z component to set. */ set z(value: number); /** * Called when at least one component of the {@link Vec3} has changed. * @param callback - Callback to run when at least one component of the {@link Vec3} has changed. * @returns - Our {@link Vec3}. */ onChange(callback: () => void): Vec3; /** * Set the {@link Vec3} from values. * @param x - New X component to set. * @param y - New Y component to set. * @param z - New Z component to set. * @returns - This {@link Vec3} after being set. */ set(x?: number, y?: number, z?: number): Vec3; /** * Add a {@link Vec3} to this {@link Vec3}. * @param vector - {@link Vec3} to add. * @returns - This {@link Vec3} after addition. */ add(vector?: Vec3): Vec3; /** * Add a scalar to all the components of this {@link Vec3}. * @param value - Number to add. * @returns - This {@link Vec3} after addition. */ addScalar(value?: number): Vec3; /** * Subtract a {@link Vec3} from this {@link Vec3}. * @param vector - {@link Vec3} to subtract. * @returns - This {@link Vec3} after subtraction. */ sub(vector?: Vec3): Vec3; /** * Subtract a scalar to all the components of this {@link Vec3}. * @param value - Number to subtract. * @returns - This {@link Vec3} after subtraction. */ subScalar(value?: number): Vec3; /** * Multiply a {@link Vec3} with this {@link Vec3}. * @param vector - {@link Vec3} to multiply with. * @returns - This {@link Vec3} after multiplication. */ multiply(vector?: Vec3): Vec3; /** * Multiply all components of this {@link Vec3} with a scalar. * @param value - Number to multiply with. * @returns - This {@link Vec3} after multiplication. */ multiplyScalar(value?: number): Vec3; /** * Divide a {@link Vec3} with this {@link Vec3}. * @param vector - {@link Vec3} to divide with. * @returns - This {@link Vec3} after division. */ divide(vector?: Vec3): Vec3; /** * Divide all components of this {@link Vec3} with a scalar. * @param value - number to divide with. * @returns - This {@link Vec3} after division. */ divideScalar(value?: number): Vec3; /** * Copy a {@link Vec3} into this {@link Vec3}. * @param vector - {@link Vec3} to copy. * @returns - This {@link Vec3} after copy. */ copy(vector?: Vec3): Vec3; /** * Clone this {@link Vec3}. * @returns - Cloned {@link Vec3}. */ clone(): Vec3; /** * Apply max values to this {@link Vec3} components. * @param vector - {@link Vec3} representing max values. * @returns - {@link Vec3} with max values applied. */ max(vector?: Vec3): Vec3; /** * Apply min values to this {@link Vec3} components. * @param vector - {@link Vec3} representing min values. * @returns - {@link Vec3} with min values applied. */ min(vector?: Vec3): Vec3; /** * Clamp this {@link Vec3} components by min and max {@link Vec3} vectors. * @param min - Minimum {@link Vec3} components to compare with. * @param max - Maximum {@link Vec3} components to compare with. * @returns - Clamped {@link Vec3}. */ clamp(min?: Vec3, max?: Vec3): Vec3; /** * Check if 2 {@link Vec3} are equal. * @param vector - {@link Vec3} to compare. * @returns - Whether the {@link Vec3} are equals or not. */ equals(vector?: Vec3): boolean; /** * Get the square length of this {@link Vec3}. * @returns - Square length of this {@link Vec3}. */ lengthSq(): number; /** * Get the length of this {@link Vec3}. * @returns - Length of this {@link Vec3}. */ length(): number; /** * Get the euclidian distance between this {@link Vec3} and another {@link Vec3}. * @param vector - {@link Vec3} to use for distance calculation. * @returns - Euclidian distance. */ distance(vector?: Vec3): number; /** * Normalize this {@link Vec3}. * @returns - Normalized {@link Vec3}. */ normalize(): Vec3; /** * Calculate the dot product of 2 {@link Vec3}. * @param vector - {@link Vec3} to use for dot product. * @returns - Dot product of the 2 {@link Vec3}. */ dot(vector?: Vec3): number; /** * Get the cross product of this {@link Vec3} with another {@link Vec3}. * @param vector - {@link Vec3} to use for cross product. * @returns - This {@link Vec3} after cross product. */ cross(vector?: Vec3): Vec3; /** * Set this {@link Vec3} as the result of the cross product of two {@link Vec3}. * @param a - First {@link Vec3} to use for cross product. * @param b - Second {@link Vec3} to use for cross product. * @returns - This {@link Vec3} after cross product. */ crossVectors(a?: Vec3, b?: Vec3): Vec3; /** * Calculate the linear interpolation of this {@link Vec3} by given {@link Vec3} and alpha, where alpha is the percent distance along the line. * @param vector - {@link Vec3} to interpolate towards. * @param alpha - Interpolation factor in the [0, 1] interval. * @returns - This {@link Vec3} after linear interpolation. */ lerp(vector?: Vec3, alpha?: number): Vec3; /** * Apply a {@link Mat4 | matrix} to a {@link Vec3}. * Useful to convert a position {@link Vec3} from plane local world to webgl space using projection view matrix for example. * Source code from: http://glmatrix.net/docs/vec3.js.html * @param matrix - {@link Mat4 | matrix} to use. * @returns - This {@link Vec3} after {@link Mat4 | matrix} application. */ applyMat4(matrix: Mat4): Vec3; /** * Set this {@link Vec3} to the translation component of a {@link Mat4 | matrix}. * @param matrix - {@link Mat4 | matrix} to use. * @returns - This {@link Vec3} after {@link Mat4 | matrix} application. */ setFromMatrixPosition(matrix: Mat4): this; /** * Apply a {@link Quat | quaternion} (rotation in 3D space) to this {@link Vec3}. * @param quaternion - {@link Quat | quaternion} to use. * @returns - This {@link Vec3} with the transformation applied. */ applyQuat(quaternion?: Quat): Vec3; /** * Rotate a {@link Vec3} around and axis by a given angle. * @param axis - Normalized {@link Vec3} around which to rotate. * @param angle - Angle (in radians) to rotate. * @param quaternion - Optional {@link Quat | quaternion} to use for rotation computations. * @returns - This {@link Vec3} with the rotation applied. */ applyAxisAngle(axis?: Vec3, angle?: number, quaternion?: Quat): Vec3; /** * Transforms the direction of this vector by a {@link Mat4} (the upper left 3 x 3 subset) and then normalizes the result. * @param matrix - {@link Mat4} to use for transformation. * @returns - This {@link Vec3} with the transformation applied. */ transformDirection(matrix: Mat4): Vec3; /** * Project a 3D coordinate {@link Vec3} to a 2D coordinate {@link Vec3}. * @param camera - {@link Camera} to use for projection. * @returns - Projected {@link Vec3}. */ project(camera: Camera): Vec3; /** * Unproject a 2D coordinate {@link Vec3} to 3D coordinate {@link Vec3}. * @param camera - {@link Camera} to use for projection. * @returns - Unprojected {@link Vec3}. */ unproject(camera: Camera): Vec3; }