diff options
Diffstat (limited to 'meta/3rd/Defold/library/vector_math.lua')
m--------- | meta/3rd/Defold | 0 | ||||
-rw-r--r-- | meta/3rd/Defold/library/vector_math.lua | 406 |
2 files changed, 0 insertions, 406 deletions
diff --git a/meta/3rd/Defold b/meta/3rd/Defold new file mode 160000 +Subproject 05379b40fb3084d82f7270475e42da8d521c4da diff --git a/meta/3rd/Defold/library/vector_math.lua b/meta/3rd/Defold/library/vector_math.lua deleted file mode 100644 index 8196bfd6..00000000 --- a/meta/3rd/Defold/library/vector_math.lua +++ /dev/null @@ -1,406 +0,0 @@ ----Vector math API documentation ----Functions for mathematical operations on vectors, matrices and quaternions. ---- ---- ---- * The vector types (vmath.vector3 and vmath.vector4) supports addition and subtraction ---- with vectors of the same type. Vectors can be negated and multiplied (scaled) or divided by numbers. ---- ---- * The quaternion type (vmath.quat) supports multiplication with other quaternions. ---- ---- * The matrix type (vmath.matrix4) can be multiplied with numbers, other matrices ---- and vmath.vector4 values. ---- ---- * All types performs equality comparison by each component value. ---- ----The following components are available for the various types: ---- ---- vector3 ----x, y and z. Example: v.y ---- vector4 ----x, y, z, and w. Example: v.w ---- quaternion ----x, y, z, and w. Example: q.w ---- matrix4 ----m00 to m33 where the first number is the row (starting from 0) and the second ----number is the column. Columns can be accessed with c0 to c3, returning a vector4. ----Example: m.m21 which is equal to m.c1.z ---- vector ----indexed by number 1 to the vector length. Example: v[3] - ----@class vmath -vmath = {} ----Calculates the conjugate of a quaternion. The result is a ----quaternion with the same magnitudes but with the sign of ----the imaginary (vector) parts changed: ----q* = [w, -v] ----@param q1 quaternion # quaternion of which to calculate the conjugate ----@return quaternion # the conjugate -function vmath.conj(q1) end - ----Given two linearly independent vectors P and Q, the cross product, ----P ? Q, is a vector that is perpendicular to both P and Q and ----therefore normal to the plane containing them. ----If the two vectors have the same direction (or have the exact ----opposite direction from one another, i.e. are not linearly independent) ----or if either one has zero length, then their cross product is zero. ----@param v1 vector3 # first vector ----@param v2 vector3 # second vector ----@return vector3 # a new vector representing the cross product -function vmath.cross(v1, v2) end - ----The returned value is a scalar defined as: ----P ? Q = |P| |Q| cos ? ----where ? is the angle between the vectors P and Q. ---- ---- ---- * If the dot product is positive then the angle between the vectors is below 90 degrees. ---- ---- * If the dot product is zero the vectors are perpendicular (at right-angles to each other). ---- ---- * If the dot product is negative then the angle between the vectors is more than 90 degrees. ----@param v1 vector3|vector4 # first vector ----@param v2 vector3|vector4 # second vector ----@return number # dot product -function vmath.dot(v1, v2) end - ----The resulting matrix is the inverse of the supplied matrix. ---- For ortho-normal matrices, e.g. regular object transformation, ----use vmath.ortho_inv() instead. ----The specialized inverse for ortho-normalized matrices is much faster ----than the general inverse. ----@param m1 matrix4 # matrix to invert ----@return matrix4 # inverse of the supplied matrix -function vmath.inv(m1) end - ----Returns the length of the supplied vector or quaternion. ----If you are comparing the lengths of vectors or quaternions, you should compare ----the length squared instead as it is slightly more efficient to calculate ----(it eliminates a square root calculation). ----@param v vector3|vector4|quat # value of which to calculate the length ----@return number # length -function vmath.length(v) end - ----Returns the squared length of the supplied vector or quaternion. ----@param v vector3|vector4|quat # value of which to calculate the squared length ----@return number # squared length -function vmath.length_sqr(v) end - ----Linearly interpolate between two vectors. The function ----treats the vectors as positions and interpolates between ----the positions in a straight line. Lerp is useful to describe ----transitions from one place to another over time. ---- The function does not clamp t between 0 and 1. ----@param t number # interpolation parameter, 0-1 ----@param v1 vector3|vector4 # vector to lerp from ----@param v2 vector3|vector4 # vector to lerp to ----@return vector3|vector4 # the lerped vector -function vmath.lerp(t, v1, v2) end - ----Linearly interpolate between two quaternions. Linear ----interpolation of rotations are only useful for small ----rotations. For interpolations of arbitrary rotations, ----vmath.slerp <> yields much better results. ---- The function does not clamp t between 0 and 1. ----@param t number # interpolation parameter, 0-1 ----@param q1 quaternion # quaternion to lerp from ----@param q2 quaternion # quaternion to lerp to ----@return quaternion # the lerped quaternion -function vmath.lerp(t, q1, q2) end - ----Linearly interpolate between two values. Lerp is useful ----to describe transitions from one value to another over time. ---- The function does not clamp t between 0 and 1. ----@param t number # interpolation parameter, 0-1 ----@param n1 number # number to lerp from ----@param n2 number # number to lerp to ----@return number # the lerped number -function vmath.lerp(t, n1, n2) end - ----The resulting identity matrix describes a transform with ----no translation or rotation. ----@return matrix4 # identity matrix -function vmath.matrix4() end - ----Creates a new matrix with all components set to the ----corresponding values from the supplied matrix. I.e. ----the function creates a copy of the given matrix. ----@param m1 matrix4 # existing matrix ----@return matrix4 # matrix which is a copy of the specified matrix -function vmath.matrix4(m1) end - ----The resulting matrix describes a rotation around the axis by the specified angle. ----@param v vector3 # axis ----@param angle number # angle in radians ----@return matrix4 # matrix represented by axis and angle -function vmath.matrix4_axis_angle(v, angle) end - ----The resulting matrix describes the same rotation as the quaternion, but does not have any translation (also like the quaternion). ----@param q quaternion # quaternion to create matrix from ----@return matrix4 # matrix represented by quaternion -function vmath.matrix4_from_quat(q) end - ----Constructs a frustum matrix from the given values. The left, right, ----top and bottom coordinates of the view cone are expressed as distances ----from the center of the near clipping plane. The near and far coordinates ----are expressed as distances from the tip of the view frustum cone. ----@param left number # coordinate for left clipping plane ----@param right number # coordinate for right clipping plane ----@param bottom number # coordinate for bottom clipping plane ----@param top number # coordinate for top clipping plane ----@param near number # coordinate for near clipping plane ----@param far number # coordinate for far clipping plane ----@return matrix4 # matrix representing the frustum -function vmath.matrix4_frustum(left, right, bottom, top, near, far) end - ----The resulting matrix is created from the supplied look-at parameters. ----This is useful for constructing a view matrix for a camera or ----rendering in general. ----@param eye vector3 # eye position ----@param look_at vector3 # look-at position ----@param up vector3 # up vector ----@return matrix4 # look-at matrix -function vmath.matrix4_look_at(eye, look_at, up) end - ----Creates an orthographic projection matrix. ----This is useful to construct a projection matrix for a camera or rendering in general. ----@param left number # coordinate for left clipping plane ----@param right number # coordinate for right clipping plane ----@param bottom number # coordinate for bottom clipping plane ----@param top number # coordinate for top clipping plane ----@param near number # coordinate for near clipping plane ----@param far number # coordinate for far clipping plane ----@return matrix4 # orthographic projection matrix -function vmath.matrix4_orthographic(left, right, bottom, top, near, far) end - ----Creates a perspective projection matrix. ----This is useful to construct a projection matrix for a camera or rendering in general. ----@param fov number # angle of the full vertical field of view in radians ----@param aspect number # aspect ratio ----@param near number # coordinate for near clipping plane ----@param far number # coordinate for far clipping plane ----@return matrix4 # perspective projection matrix -function vmath.matrix4_perspective(fov, aspect, near, far) end - ----The resulting matrix describes a rotation around the x-axis ----by the specified angle. ----@param angle number # angle in radians around x-axis ----@return matrix4 # matrix from rotation around x-axis -function vmath.matrix4_rotation_x(angle) end - ----The resulting matrix describes a rotation around the y-axis ----by the specified angle. ----@param angle number # angle in radians around y-axis ----@return matrix4 # matrix from rotation around y-axis -function vmath.matrix4_rotation_y(angle) end - ----The resulting matrix describes a rotation around the z-axis ----by the specified angle. ----@param angle number # angle in radians around z-axis ----@return matrix4 # matrix from rotation around z-axis -function vmath.matrix4_rotation_z(angle) end - ----The resulting matrix describes a translation of a point ----in euclidean space. ----@param position vector3|vector4 # position vector to create matrix from ----@return matrix4 # matrix from the supplied position vector -function vmath.matrix4_translation(position) end - ----Performs an element wise multiplication between two vectors of the same type ----The returned value is a vector defined as (e.g. for a vector3): ----v = vmath.mul_per_elem(a, b) = vmath.vector3(a.x * b.x, a.y * b.y, a.z * b.z) ----@param v1 vector3|vector4 # first vector ----@param v2 vector3|vector4 # second vector ----@return vector3|vector4 # multiplied vector -function vmath.mul_per_elem(v1, v2) end - ----Normalizes a vector, i.e. returns a new vector with the same ----direction as the input vector, but with length 1. ---- The length of the vector must be above 0, otherwise a ----division-by-zero will occur. ----@param v1 vector3|vector4|quat # vector to normalize ----@return vector3|vector4|quat # new normalized vector -function vmath.normalize(v1) end - ----The resulting matrix is the inverse of the supplied matrix. ----The supplied matrix has to be an ortho-normal matrix, e.g. ----describe a regular object transformation. ---- For matrices that are not ortho-normal ----use the general inverse vmath.inv() instead. ----@param m1 matrix4 # ortho-normalized matrix to invert ----@return matrix4 # inverse of the supplied matrix -function vmath.ortho_inv(m1) end - ----Calculates the extent the projection of the first vector onto the second. ----The returned value is a scalar p defined as: ----p = |P| cos ? / |Q| ----where ? is the angle between the vectors P and Q. ----@param v1 vector3 # vector to be projected on the second ----@param v2 vector3 # vector onto which the first will be projected, must not have zero length ----@return number # the projected extent of the first vector onto the second -function vmath.project(v1, v2) end - ----Creates a new identity quaternion. The identity ----quaternion is equal to: ----vmath.quat(0, 0, 0, 1) ----@return quaternion # new identity quaternion -function vmath.quat() end - ----Creates a new quaternion with all components set to the ----corresponding values from the supplied quaternion. I.e. ----This function creates a copy of the given quaternion. ----@param q1 quaternion # existing quaternion ----@return quaternion # new quaternion -function vmath.quat(q1) end - ----Creates a new quaternion with the components set ----according to the supplied parameter values. ----@param x number # x coordinate ----@param y number # y coordinate ----@param z number # z coordinate ----@param w number # w coordinate ----@return quaternion # new quaternion -function vmath.quat(x, y, z, w) end - ----The resulting quaternion describes a rotation of angle ----radians around the axis described by the unit vector v. ----@param v vector3 # axis ----@param angle number # angle ----@return quaternion # quaternion representing the axis-angle rotation -function vmath.quat_axis_angle(v, angle) end - ----The resulting quaternion describes the rotation from the ----identity quaternion (no rotation) to the coordinate system ----as described by the given x, y and z base unit vectors. ----@param x vector3 # x base vector ----@param y vector3 # y base vector ----@param z vector3 # z base vector ----@return quaternion # quaternion representing the rotation of the specified base vectors -function vmath.quat_basis(x, y, z) end - ----The resulting quaternion describes the rotation that, ----if applied to the first vector, would rotate the first ----vector to the second. The two vectors must be unit ----vectors (of length 1). ---- The result is undefined if the two vectors point in opposite directions ----@param v1 vector3 # first unit vector, before rotation ----@param v2 vector3 # second unit vector, after rotation ----@return quaternion # quaternion representing the rotation from first to second vector -function vmath.quat_from_to(v1, v2) end - ----The resulting quaternion describes a rotation of angle ----radians around the x-axis. ----@param angle number # angle in radians around x-axis ----@return quaternion # quaternion representing the rotation around the x-axis -function vmath.quat_rotation_x(angle) end - ----The resulting quaternion describes a rotation of angle ----radians around the y-axis. ----@param angle number # angle in radians around y-axis ----@return quaternion # quaternion representing the rotation around the y-axis -function vmath.quat_rotation_y(angle) end - ----The resulting quaternion describes a rotation of angle ----radians around the z-axis. ----@param angle number # angle in radians around z-axis ----@return quaternion # quaternion representing the rotation around the z-axis -function vmath.quat_rotation_z(angle) end - ----Returns a new vector from the supplied vector that is ----rotated by the rotation described by the supplied ----quaternion. ----@param q quaternion # quaternion ----@param v1 vector3 # vector to rotate ----@return vector3 # the rotated vector -function vmath.rotate(q, v1) end - ----Spherically interpolates between two vectors. The difference to ----lerp is that slerp treats the vectors as directions instead of ----positions in space. ----The direction of the returned vector is interpolated by the angle ----and the magnitude is interpolated between the magnitudes of the ----from and to vectors. ---- Slerp is computationally more expensive than lerp. ----The function does not clamp t between 0 and 1. ----@param t number # interpolation parameter, 0-1 ----@param v1 vector3|vector4 # vector to slerp from ----@param v2 vector3|vector4 # vector to slerp to ----@return vector3|vector4 # the slerped vector -function vmath.slerp(t, v1, v2) end - ----Slerp travels the torque-minimal path maintaining constant ----velocity, which means it travels along the straightest path along ----the rounded surface of a sphere. Slerp is useful for interpolation ----of rotations. ----Slerp travels the torque-minimal path, which means it travels ----along the straightest path the rounded surface of a sphere. ---- The function does not clamp t between 0 and 1. ----@param t number # interpolation parameter, 0-1 ----@param q1 quaternion # quaternion to slerp from ----@param q2 quaternion # quaternion to slerp to ----@return quaternion # the slerped quaternion -function vmath.slerp(t, q1, q2) end - ----Creates a vector of arbitrary size. The vector is initialized ----with numeric values from a table. ---- The table values are converted to floating point ----values. If a value cannot be converted, a 0 is stored in that ----value position in the vector. ----@param t table # table of numbers ----@return vector # new vector -function vmath.vector(t) end - ----Creates a new zero vector with all components set to 0. ----@return vector3 # new zero vector -function vmath.vector3() end - ----Creates a new vector with all components set to the ----supplied scalar value. ----@param n number # scalar value to splat ----@return vector3 # new vector -function vmath.vector3(n) end - ----Creates a new vector with all components set to the ----corresponding values from the supplied vector. I.e. ----This function creates a copy of the given vector. ----@param v1 vector3 # existing vector ----@return vector3 # new vector -function vmath.vector3(v1) end - ----Creates a new vector with the components set to the ----supplied values. ----@param x number # x coordinate ----@param y number # y coordinate ----@param z number # z coordinate ----@return vector3 # new vector -function vmath.vector3(x, y, z) end - ----Creates a new zero vector with all components set to 0. ----@return vector4 # new zero vector -function vmath.vector4() end - ----Creates a new vector with all components set to the ----supplied scalar value. ----@param n number # scalar value to splat ----@return vector4 # new vector -function vmath.vector4(n) end - ----Creates a new vector with all components set to the ----corresponding values from the supplied vector. I.e. ----This function creates a copy of the given vector. ----@param v1 vector4 # existing vector ----@return vector4 # new vector -function vmath.vector4(v1) end - ----Creates a new vector with the components set to the ----supplied values. ----@param x number # x coordinate ----@param y number # y coordinate ----@param z number # z coordinate ----@param w number # w coordinate ----@return vector4 # new vector -function vmath.vector4(x, y, z, w) end - - - - -return vmath
\ No newline at end of file |