Quaternion
The Quaternion class represents a quaternion. Quaternions are used to describe rotation in 3D space. Quaternion contains several helpful static functions, which can be called like this: Quaternion.multiply(quat1, quat2). Objects of the Quaternion class have 4 number properties: x, y, z, and w.
Function | Description |
---|---|
inverse() |
Inverts the quaternion. |
toEuler() |
Converts from Quaternion to Euler angles (in degrees). |
Static Function | Description |
---|---|
angle(quat1, quat2) |
Returns the angle between two Quaternions. |
fromEuler(pitch, yaw, roll) |
Converts from Euler angles to Quaternion. |
lerp(quat1, quat2, t) |
Interpolates between two Quaternions using linear interpolation and returns the result. |
lookAt(lookStart, lookEnd) |
Returns a Quaternion oriented to the given 3D coordinates. |
multiply(quat1, quat2) |
Multiplies the given Quaternions and returns the result. |
slerp(quat1, quat2, t) |
Interpolates between two Quaternions using spherical spline interpolation and returns the result. |
inverse()
Inverts the quaternion.
Returns
boolean true if the inversion was successful, false if not
toEuler()
Converts from Quaternion to Euler angles (in degrees).
Returns
Vec3 the {x, y, z} yaw, pitch, and roll Euler angles
angle(quat1, quat2)
Returns the angle between two Quaternions.
Parameters
Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion
Returns
number – the resulting angle
fromEuler(pitch, yaw, roll)
Converts from Euler angles to Quaternion.
Parameters
number pitch – the x-axis component
number yaw – the y-axis component
number roll – the z-axis component
Returns
Quaternion the resulting Quaternion
lerp(quat1, quat2, t)
Interpolates between two quaternions using linear interpolation and returns the result. Less accurate than slerp() but more efficient. The interpolation curve for linear interpolation between quaternions gives a straight line in quaternion space.
Parameters
Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion
number t the interpolation coefficient
Returns
Quaternion the resulting Quaternion
lookAt(lookStart, lookEnd)
Returns a Quaternion oriented to the given 3D coordinates.
Parameters
Vec3 lookStart – the first set of 3D coordinates
Vec3 lookEnd – the second set of 3D coordinates
Returns
Quaternion – the resulting Quaternion
let _target; function start(){ _target = this.scene().findFirst("Cube"); } function update(dt){ // rotate the projectile to face the target let currentQuat = this.entity().rotationQuat(); let nextQuat = Quaternion.lookAt(this.entity().position(), _target.position()); nextQuat = Quaternion.slerp(currentQuat, nextQuat, 0.5); this.entity().setRotationQuat(nextQuat); // move the projectile toward the target in an arcing movement let mat = Mat4.createRotation(nextQuat); let forward = Mat4.transformPoint(mat, new Vec3(1, 1, -1)); let curPos = this.entity().position(); this.entity().setPosition( curPos.x + 0.1 * forward.x, curPos.y + 0.1 * forward.y, curPos.z + 0.1 * forward.z); }
multiply(quat1, quat2)
Multiplies the given Quaternions and returns the result.
Parameters
Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion
Returns
Quaternion – the resulting Quaternion
slerp(quat1, quat2, alpha)
Interpolates between two Quaternions using spherical spline interpolation and returns the result. More accurate than lerp() but less efficient. Spherical spline interpolation provides smooth transitions between different orientations and is often useful for animating models or cameras in 3D.
Parameters
Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion
number t the interpolation coefficient
Returns
Quaternion the resulting Quaternion