three.js Quaternion
该类实现了 quaternion 。
四元数在three.js中用于表示 rotation (旋转)。
对 Quaternion 实例进行遍历将按相应的顺序生成它的分量 (x, y, z, w)。
代码示例
const quaternion = new THREE.Quaternion();
quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );
const vector = new THREE.Vector3( 1, 0, 0 );
vector.applyQuaternion( quaternion );
构造函数
Quaternion( x : Float, y : Float, z : Float, w : Float )
x - x 坐标
y - y 坐标
z - z 坐标
w - w 坐标
属性
.isQuaternion : Boolean
只读标志,用于检查给定对象是否为四元数类型。
.x : Float
.y : Float
.z : Float
.w : Float
方法
.angleTo ( q : Quaternion ) : Float
以弧度返回该四元数与四元数 q 之间的夹角。
.clone () : Quaternion
创建一个与该四元数具有相同x、y、z和w 属性的四元数。
.conjugate () : this
返回该四元数的旋转共轭。 四元数的共轭表示的是,围绕旋转轴在相反方向上的相同旋转。
.copy ( q : Quaternion ) : this
复制四元数 q 的 x、y、z 和 w 属性到该四元数中。
.equals ( v : Quaternion ) : Boolean
v - 用于进行比较的四元数。
将四元数 v 的 x、 y、 z 和 w 的属性 与当前四元数的对应属性相比较,以确定它们是否表示相同的旋转。
.dot ( v : Quaternion ) : Float
计算四元数 v 与当前四元数的dot product(点积)。
.fromArray ( array : Array, offset : Integer ) : this
array - 用于构造四元数的形如(x, y, z, w)的数组。
offset - (可选)数组的偏移量。(译者注:使用数组中从第offset元素算起的四个元素)
从一个数组来设置四元数的 x、 y、z 和 w 的属性。
.identity () : this
设置该四元数为 identity 四元数,即表示“不旋转”的四元数。
.invert () : this
翻转该四元数 —— 计算 conjugate 。假定该四元数具有单位长度。
.length () : Float
计算四元数的 Euclidean length (欧几里得长度,直线长度),视为一个四维向量。
.lengthSq () : Float
计算四元数 Euclidean length (欧几里得长度,直线长度)的平方,视为一个四维向量。 如果要比较两个四元数的长度,这可能会十分有用, 因为这比 length() 的效率稍高一些。
.normalize () : this
Normalizes(归一化)四元数 —— 即计算与该四元数具有相同旋转、但长度为1的四元数。
.multiply ( q : Quaternion ) : this
将该四元数与q相乘。
.multiplyQuaternions ( a : Quaternion, b : Quaternion ) : this
将该四元数设为 a x b 。
改编自 here 所概述的方法。
.premultiply ( q : Quaternion ) : this
使用 q 乘以该四元数。
.rotateTowards ( q : Quaternion, step : Float ) : this
q - 目标四元数
step - 以弧度为单位的角度步长
将该四元数按照步长 step 向目标 q 进行旋转。该方法确保最终的四元数不会超过 q。
.slerp ( qb : Quaternion, t : Float ) : this
qb - 另一个四元数旋转
t - 闭区间 [0, 1] 中的插值因子
处理四元数之间的球面线性插值。t 表示该四元数(其中 t 为 0) 和 qb (其中 t 为1) 之间的旋转量。 该四元数会被设置为上述计算的结果。另请参阅下面 slerp 的静态版本。
// rotate a mesh towards a target quaternion
mesh.quaternion.slerp( endQuaternion, 0.01 );
.slerpQuaternions ( qa : Quaternion, qb : Quaternion, t : Float ) : this
在给定的四元数之间执行球面线性插值,并将结果存储在这个四元数中
.set ( x : Float, y : Float, z : Float, w : Float ) : this
设置该四元数的 x、y、z和w属性。
.setFromAxisAngle ( axis : Vector3, angle : Float ) : this
从由 axis(轴) 和 angle(角度)所给定的旋转来设置该四元数。
改编自 here 所述的方法。
假定Axis已被归一化,angle以弧度来表示。
.setFromEuler ( euler : Euler ) : this
从由 Euler 角所给定的旋转来设置该四元数。
.setFromRotationMatrix ( m : Matrix4 ) : this
从m的旋转分量中来设置该四元数。
改编自 here 所概述的方法。
.setFromUnitVectors ( vFrom : Vector3, vTo : Vector3 ) : this
将该四元数设置为从方向向量 vFrom 旋转到方向向量 vTo 所需的旋转。
改编自方法 here。
假设 vFrom 和 vTo 都已归一化。
.toArray ( array : Array, offset : Integer ) : Array
array - (可选)存储该四元数的数组。若未指定该参数,则将创建一个新数组。
offset - (可选)若指定了该值,结果将会被拷贝到该 Array。
在形如[x, y, z, w]的数组中,返回四元数中的数字元素。
.fromBufferAttribute ( attribute : BufferAttribute, index : Integer ) : this
attribute - 源 attribute。
index - attribute 中的索引。
从 attribute 中设置该四元数的x、 y、 z、 w属性。
静态方法
.slerpFlat ( dst : Array, dstOffset : Integer, src0 : Array, srcOffset0 : Integer, src1 : Array, srcOffset1 : Integer, t : Float ) : undefined
dst - 输出数组
dstOffset - 输出数组的偏移量
src0 - 起始四元数的源数组
srcOffset0 - 数组 src0 的偏移量
src1 - 目标四元数的源数组
srcOffset1 - 数组 src1 的偏移量
t - 归一化插值因子(介于 0 和 1 之间)
此 SLERP 实施假定四元数数据在平面数组中进行管理。
.multiplyQuaternionsFlat ( dst : Array, dstOffset : Integer, src0 : Array, srcOffset0 : Integer, src1 : Array, srcOffset1 : Integer ) : Array
dst - 输出数组。
dstOffset - 输出数组的偏移量。
src0 - 起始四元数的源数组。
srcOffset0 - 数组 src0 的偏移量。
src1 - 目标四元数的源数组。
srcOffset1 - 数组 src1 的偏移量。
此乘法实现假定四元数数据在平面数组中进行管理。
更多建议: