Create a new Quat instance.
Optional
x: number | number[] = 0The quaternion's x component. Defaults to 0. If x is an array of length 4, the array will be used to populate all components.
Optional
y: number = 0The quaternion's y component. Defaults to 0.
Optional
z: number = 0The quaternion's z component. Defaults to 0.
Optional
w: number = 1The quaternion's w component. Defaults to 1.
The w component of the quaternion.
The x component of the quaternion.
The y component of the quaternion.
The z component of the quaternion.
Static
Readonly
IDENTITYA constant quaternion set to [0, 0, 0, 1] (the identity).
Static
Readonly
ZEROA constant quaternion set to [0, 0, 0, 0].
Copies the contents of a source quaternion to a destination quaternion.
The quaternion to be copied.
Self for chaining.
const src = new pc.Quat();
const dst = new pc.Quat();
dst.copy(src, src);
console.log("The two quaternions are " + (src.equals(dst) ? "equal" : "different"));
Reports whether two quaternions are equal.
The quaternion to be compared against.
True if the quaternions are equal and false otherwise.
const a = new pc.Quat();
const b = new pc.Quat();
console.log("The two quaternions are " + (a.equals(b) ? "equal" : "different"));
Reports whether two quaternions are equal using an absolute error tolerance.
The quaternion to be compared against.
Optional
epsilon: number = 1e-6The maximum difference between each component of the two quaternions. Defaults to 1e-6.
True if the quaternions are equal and false otherwise.
const a = new pc.Quat();
const b = new pc.Quat();
console.log("The two quaternions are approximately " + (a.equalsApprox(b, 1e-9) ? "equal" : "different"));
Gets the rotation axis and angle for a given quaternion. If a quaternion is created with
setFromAxisAngle
, this method will return the same values as provided in the original
parameter list OR functionally equivalent values.
The 3-dimensional vector to receive the axis of rotation.
Angle, in degrees, of the rotation.
const q = new pc.Quat();
q.setFromAxisAngle(new pc.Vec3(0, 1, 0), 90);
const v = new pc.Vec3();
const angle = q.getAxisAngle(v);
// Outputs 90
console.log(angle);
// Outputs [0, 1, 0]
console.log(v.toString());
Generates the inverse of the specified quaternion.
Optional
src: Quat = ...The quaternion to invert. If not set, the operation is done in place.
Self for chaining.
// Create a quaternion rotated 180 degrees around the y-axis
const rot = new pc.Quat().setFromEulerAngles(0, 180, 0);
// Invert in place
rot.invert();
Returns the result of multiplying the specified quaternions together.
The quaternion used as the second multiplicand of the operation.
Self for chaining.
const a = new pc.Quat().setFromEulerAngles(0, 30, 0);
const b = new pc.Quat().setFromEulerAngles(0, 60, 0);
// a becomes a 90 degree rotation around the Y axis
// In other words, a = a * b
a.mul(b);
console.log("The result of the multiplication is: " + a.toString());
Returns the result of multiplying the specified quaternions together.
Self for chaining.
const a = new pc.Quat().setFromEulerAngles(0, 30, 0);
const b = new pc.Quat().setFromEulerAngles(0, 60, 0);
const r = new pc.Quat();
// r is set to a 90 degree rotation around the Y axis
// In other words, r = a * b
r.mul2(a, b);
console.log("The result of the multiplication is: " + r.toString());
Returns the specified quaternion converted in place to a unit quaternion.
Optional
src: Quat = ...The quaternion to normalize. If not set, the operation is done in place.
The result of the normalization.
const v = new pc.Quat(0, 0, 0, 5);
v.normalize();
// Outputs 0, 0, 0, 1
console.log("The result of the vector normalization is: " + v.toString());
Sets the specified quaternion to the supplied numerical values.
The x component of the quaternion.
The y component of the quaternion.
The z component of the quaternion.
The w component of the quaternion.
Self for chaining.
const q = new pc.Quat();
q.set(1, 0, 0, 0);
// Outputs 1, 0, 0, 0
console.log("The result of the vector set is: " + q.toString());
Sets a quaternion from an angular rotation around an axis.
World space axis around which to rotate.
Angle to rotate around the given axis in degrees.
Self for chaining.
const q = new pc.Quat();
q.setFromAxisAngle(pc.Vec3.UP, 90);
Sets a quaternion from Euler angles specified in XYZ order.
Angle to rotate around X axis in degrees. If ex is a Vec3, the three angles will be read from it instead.
Optional
ey: numberAngle to rotate around Y axis in degrees.
Optional
ez: numberAngle to rotate around Z axis in degrees.
Self for chaining.
// Create a quaternion from 3 euler angles
const q = new pc.Quat();
q.setFromEulerAngles(45, 90, 180);
// Create the same quaternion from a vector containing the same 3 euler angles
const v = new pc.Vec3(45, 90, 180);
const r = new pc.Quat();
r.setFromEulerAngles(v);
Converts the specified 4x4 matrix to a quaternion. Note that since a quaternion is purely a representation for orientation, only the translational part of the matrix is lost.
The 4x4 matrix to convert.
Self for chaining.
// Create a 4x4 rotation matrix of 180 degrees around the y-axis
const rot = new pc.Mat4().setFromAxisAngle(pc.Vec3.UP, 180);
// Convert to a quaternion
const q = new pc.Quat().setFromMat4(rot);
Performs a spherical interpolation between two quaternions. The result of the interpolation is written to the quaternion calling the function.
The quaternion to interpolate from.
The quaternion to interpolate to.
The value controlling the interpolation in relation to the two input quaternions. The value is in the range 0 to 1, 0 generating q1, 1 generating q2 and anything in between generating a spherical interpolation between the two.
Self for chaining.
const q1 = new pc.Quat(-0.11, -0.15, -0.46, 0.87);
const q2 = new pc.Quat(-0.21, -0.21, -0.67, 0.68);
const result;
result = new pc.Quat().slerp(q1, q2, 0); // Return q1
result = new pc.Quat().slerp(q1, q2, 0.5); // Return the midpoint interpolant
result = new pc.Quat().slerp(q1, q2, 1); // Return q2
Transforms a 3-dimensional vector by the specified quaternion.
The input vector v transformed by the current instance.
// Create a 3-dimensional vector
const v = new pc.Vec3(1, 2, 3);
// Create a 4x4 rotation matrix
const q = new pc.Quat().setFromEulerAngles(10, 20, 30);
const tv = q.transformVector(v);
A quaternion.