three.js Quaternion

2023-02-16 17:46 更新

该类实现了 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 的偏移量。

此乘法实现假定四元数数据在平面数组中进行管理。

源码

src/math/Quaternion.js


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号