该类实现了 quaternion 。
四元数在Verge3D中用于表示 rotation (旋转)。
const quaternion = new v3d.Quaternion();
quaternion.setFromAxisAngle(new v3d.Vector3(0, 1, 0), Math.PI / 2);
const vector = new v3d.Vector3(1, 0, 0);
vector.applyQuaternion(quaternion);
x — x 坐标
y — y 坐标
z — z 坐标
w — w 坐标
以弧度返回该四元数与四元数 q 之间的夹角。
返回该四元数的旋转共轭。 四元数的共轭表示的是,围绕旋转轴在相反方向上的相同旋转。
v — 用于进行比较的四元数。
将四元数 v 的 x、 y、 z 和 w 的属性
与当前四元数的对应属性相比较,以确定它们是否表示相同的旋转。
计算四元数 v 与当前四元数的dot product(点积)。
array — 用于构造四元数的形如(x, y, z, w)的数组。
offset - (可选)数组的偏移量。(译者注:使用数组中从第offset元素算起的四个元素)
从一个数组来设置四元数的 x、 y、z 和 w 的属性。
设置该四元数为 identity 四元数,即表示“不旋转”的四元数。
翻转该四元数 —— 计算 conjugate 。假定该四元数具有单位长度。
计算四元数的 Euclidean length (欧几里得长度,直线长度),视为一个四维向量。
计算四元数 Euclidean length (欧几里得长度,直线长度)的平方,视为一个四维向量。 如果要比较两个四元数的长度,这可能会十分有用, 因为这比 length() 的效率稍高一些。
Normalizes(归一化)四元数 —— 即计算与该四元数具有相同旋转、但长度为1的四元数。
将该四元数与q相乘。
将该四元数设为 a x b 。
改编自 here 所概述的方法。
Pre-multiplies this quaternion by q.
q — The target quaternion.
step — The angular step in radians.
Rotates this quaternion by a given angular step to the defined quaternion q.
The method ensures that the final quaternion will not overshoot q.
qb — The other quaternion rotation
t — interpolation factor in the closed interval [0, 1].
Handles the spherical linear interpolation between quaternions. t represents the
amount of rotation between this quaternion (where t is 0) and qb (where
t is 1). This quaternion is set to the result. Also see the static version of the
slerp below.
// rotate a mesh towards a target quaternion
mesh.quaternion.slerp(endQuaternion, 0.01);
从由 axis(轴) 和 angle(角度)所给定的旋转来设置该四元数。
改编自 here 所述的方法。
假定Axis已被归一化,angle以弧度来表示。
从由 Euler 角所给定的旋转来设置该四元数。
从m的旋转分量中来设置该四元数。
改编自 here 所概述的方法。
Sets this quaternion to the rotation required to rotate direction vector vFrom to
direction vector vTo.
Adapted from the method here.
vFrom and vTo are assumed to be normalized.
array - (可选)存储该四元数的数组。若未指定该参数,则将创建一个新数组。
offset - (可选)若指定了该值,结果将会被拷贝到该
Array。
在形如[x, y, z, w]的数组中,返回四元数中的数字元素。
attribute — 源 attribute。
index — attribute 中的索引。
从 attribute 中设置该四元数的x、 y、 z、 w属性。
静态方法(相对于实例方法)被设计用来直接从类进行调用,而非从特定的实例上进行调用。
要使用静态版本,需要按照如下方式来调用:
v3d.Quaternion.slerp(qStart, qEnd, qTarget, t);
作为对比,要调用“正常”或实例的 slerp 方法,则进行如下操作:
//instantiate a quaternion with default values
const q = new v3d.Quaternion();
//call the instanced slerp method
q.slerp(qb, t)
qStart — The starting quaternion (where t is 0)
qEnd — The ending quaternion (where t is 1)
qTarget — The target quaternion that gets set with the result
t — interpolation factor in the closed interval [0, 1].
Unlike the normal method, the static version of slerp sets a target quaternion to the result of the slerp operation.
// Code setup
const startQuaternion = new v3d.Quaternion().set(0, 0, 0, 1).normalize();
const endQuaternion = new v3d.Quaternion().set(1, 1, 1, 1).normalize();
let t = 0;
// Update a mesh's rotation in the loop
t = (t + 0.01) % 1; // constant angular momentum
v3d.Quaternion.slerp(startQuaternion, endQuaternion, mesh.quaternion, t);
dst — The output array.
dstOffset — An offset into the output array.
src0 — The source array of the starting quaternion.
srcOffset0 — An offset into the array src0.
src1 — The source array of the target quatnerion.
srcOffset1 — An offset into the array src1.
t — Normalized interpolation factor (between 0 and 1).
Like the static slerp method above, but operates directly on flat arrays of numbers.