Skip to content

Vector3

该类表示的是一个三维向量(3D vector)。 一个三维向量表示的是一个有顺序的、三个为一组的数字组合(标记为x、y和z), 可被用来表示很多事物,例如:

  • 一个位于三维空间中的点。
  • 一个在三维空间中的方向与长度的定义。在three.js中,长度总是从(0, 0, 0)到(x, y, z)的 Euclidean distance(欧几里德距离,即直线距离), 方向也是从(0, 0, 0)到(x, y, z)的方向。
  • 任意的、有顺序的、三个为一组的数字组合。

其他的一些事物也可以使用二维向量进行表示,比如说动量矢量等等; 但以上这些是它在three.js中的常用用途。

对 Vector3 实例进行遍历将按相应的顺序生成它的分量 (x, y, z)。

1.构造函数

js
Vector3(x: Float, y: Float, z: Float)

参数:

  • x - 向量的x值,默认为0
  • y - 向量的y值,默认为0
  • z - 向量的z值,默认为0
js
const a = new THREE.Vector3(0, 1, 0); 
const b = new THREE.Vector3(); 
const d = a.distanceTo(b);  // 返回两个向量的距离

2.属性

isVector3

类型:Boolean

只读,检查一个对象是否为Vector3

x

类型:Float

向量的x值

y

类型:Float

向量的y值

z

类型:Float

向量的z值

3.方法

add()

将传入的向量v和这个向量相加。

js
add(v: Vector3): this

参数:

  • v:需要相加的向量

返回值:返回调用对象本身

addScalar()

向量的每个分量的值都加上标量s

js
addScalar(s: Float): this

参数:

  • s:需要相加的标量

返回值:返回调用对象本身

addScaledVector()

将所传入的向量v与标量s相乘,所得的乘积和这个向量相加。

js
addScaledVector(v: Vector3, s: Float): this

参数:

  • v:需要传入的向量
  • s:需要传入的标量

返回值:返回调用对象本身

addVectors()

将该向量设置为a + b。

js
addVectors(a: Vector3, b: Vector3): this

参数:

  • a:第一个需要相加的向量
  • b:第二个需要相加的向量

返回值:返回调用对象本身

applyAxisAngle()

将轴和角度所指定的旋转应用到该向量上。

js
applyAxisAngle(axis: Vector3, angle: Float): this

参数:

  • axis:一个被归一化的Vector3。
  • angle:以弧度表示的角度。

返回值:返回调用对象本身

applyEuler()

通过将Euler(欧拉)对象转换为Quaternion(四元数)并应用, 将欧拉变换应用到这一向量上。

js
applyEuler(euler: Euler): this

参数:

  • euler:需要转换的欧拉对象

返回值:返回调用对象本身

applyMatrix3()

将该向量乘以三阶矩阵m

js
applyMatrix3(m: Matrix3): this

参数:

  • m:需要相乘的三阶矩阵

返回值:返回调用对象本身

applyMatrix4()

将该向量乘以四阶矩阵m(第四个维度隐式地为1),并按角度进行划分。

js
applyMatrix3(m: Matrix4): this

参数:

  • m:需要相乘的四阶矩阵

返回值:返回调用对象本身

applyNormalMatrix()

将该向量乘以正规矩阵 m,并将结果进行归一化。

js
applyNormalMatrix(m: Matrix3): this

参数:

  • m:需要相乘的正规矩阵

返回值:返回调用对象本身

applyQuaternion()

将Quaternion变换应用到该向量。

js
applyQuaternion(quaternion: Quaternion): this

参数:

  • quaternion:需要应用在该向量上的四元数

返回值:返回调用对象本身

angleTo()

以弧度返回该向量与向量v之间的角度。

js
angleTo(v: Vector3): Float

参数:

  • v:一个向量

返回值:返回一个Float类型的弧度

ceil()

将该向量x分量、 y分量以及z分量向上取整为最接近的整数。

js
ceil(): this

返回值:返回调用对象本身

clamp()

设置该向量中x、y、z三个值的最大最小值

  • 如果该向量的x值、y值或z值大于限制范围内最大x值、y值或z值,则该值将会被所对应的值取代。
  • 如果该向量的x值、y值或z值小于限制范围内最小x值、y值或z值,则该值将会被所对应的值取代。
js
clamp(min: Vector3, max: Vector3): this

参数:

  • min:在限制范围内,x值、y值和z的最小值。
  • max:在限制范围内,x值、y值和z的最大值。

返回值:返回调用对象本身

clampLength()

限制向量的长度

  • 如果向量长度大于最大值,则它将会被最大值所取代。
  • 如果向量长度小于最小值,则它将会被最小值所取代。
js
clampLength(min: Float, max: Float ): this

参数:

  • min:长度将被限制为的最小值
  • max:长度将被限制为的最大值

返回值:返回调用对象本身

clampScalar()

限制向量的分量

  • 如果该向量的x值、y值或z值大于最大值,则它们将被最大值所取代。
  • 如果该向量的x值、y值或z值小于最小值,则它们将被最小值所取代。
js
clampScalar(min: Float, max: Float): this

参数:

  • min:分量将被限制为的最小值
  • max:分量将被限制为的最大值

返回值:返回调用对象本身

clone()

克隆一个新的Vector3,其具有和当前这个向量相同的x、y和z。

js
clone(): Vector3

返回值:返回克隆的新向量

copy()

将所传入Vector3的x、y和z属性复制给这一Vector3。

js
copy(v : Vector3): this

参数:

  • v:需要被复制的向量

返回值:返回调用对象本身

cross()

将该向量设置为它本身与传入的v的叉积(cross product)。

js
cross(v: Vector3): this

参数:

  • v:需要计算的向量

返回值:返回调用对象本身

crossVectors()

将该向量设置为传入的a与b的叉积(cross product)。

js
crossVectors(a: Vector3, b: Vector3): this

参数:

  • a:需要计算叉积的向量
  • b:需要计算叉积的向量

返回值:返回调用对象本身

distanceTo()

计算该向量到所传入的v间的距离。

js
distanceTo(v: Vector3): Float

参数:

  • v:需要计算距离的向量

返回值:返回两个向量直接的距离

manhattanDistanceTo()

计算该向量到所传入的v之间的曼哈顿距离(Manhattan distance)。

js
manhattanDistanceTo(v: Vector3): Float

参数:

  • v:需要计算曼哈顿距离的向量

返回值:返回两个向量的曼哈顿距离

distanceToSquared()

计算该向量到传入的v的平方距离。 如果你只是将该距离和另一个距离进行比较,则应当比较的是距离的平方, 因为它的计算效率会更高一些。

js
distanceToSquared(v: Vector3): Float

参数:

  • v:需要计算距离的向量

返回值:返回两个向量距离的平方

divide()

将该向量除以向量v。

js
divide(v : Vector3): this

参数:

  • v:需要被除的向量

返回值:返回调用对象本身

divideScalar()

将该向量除以标量s。

js
divideScalar(s : Float): this

参数:

  • s:需要被除的标量

返回值:返回调用对象本身

dot()

计算该vector和所传入v的点积(dot product)。

js
dot(v: Vector3): Float

参数:

  • v:需要计算点积的向量

返回值:返回两个向量的点积

equals()

检查该向量和v的严格相等性。

js
equals (v: Vector3): Boolean

参数:

  • v:需要被比较的向量

返回值:返回两个向量是否严格相等,相等为true,否则false

floor()

向量的分量向下取整为最接近的整数值。

js
floor(): this

返回值:返回调用对象本身

fromArray()

设置向量中的x值为array[ offset + 0 ],y值为array[ offset + 1 ], z值为array[ offset + 2 ]。

js
fromArray(array: Array, offset: Integer): this

参数:

  • array:来源矩阵。
  • offset:(可选)在数组中的元素偏移量,默认值为0。

返回值:返回调用对象本身

fromBufferAttribute()

attribute中设置向量的x值、y值和z值。

js
fromBufferAttribute(attribute: BufferAttribute, index: Integer): this

参数:

  • attribute:来源的attribute。
  • index:在attribute中的索引。

返回值:返回调用对象本身

getComponent()

获取向量的分量

js
getComponent(index: Integer): Float

参数:

  • index: 0, 1 or 2.

返回值:如果index值为0返回x值。 如果index值为1返回y值。 如果index值为2返回z值。

length()

计算从(0, 0, 0) 到 (x, y, z)的欧几里得长度 (Euclidean length,即直线长度)

js
length(): Float

返回值:返回向量的长度

manhattanLength()

计算该向量的曼哈顿长度(Manhattan length)。

js
manhattanLength(): Float

返回值:返回向量的曼哈顿长度

lengthSq()

计算从(0, 0, 0)到(x, y, z)的欧几里得长度,也就是直线长度的平方。

如果你正在比较向量的长度,应当比较的是长度的平方,因为它的计算效率更高一些。

js
lengthSq(): Float

返回值:返回向量的欧几里得长度,也就是直线长度的平方。

lerp()

在该向量与传入的向量v之间的线性插值,alpha是沿着线的长度的百分比 —— alpha = 0 时表示的是当前向量,alpha = 1 时表示的是所传入的向量v。

js
lerp(v: Vector3, alpha: Float): this

参数:

  • v:朝着进行插值的Vector3。
  • alpha:插值因数,其范围通常在[0, 1]闭区间。

返回值:返回该向量与传入的向量v之间的线性插值

lerpVectors()

将此向量设置为在v1和v2之间进行线性插值的向量, 其中alpha为两个向量之间连线的长度的百分比 —— alpha = 0 时表示的是v1,alpha = 1 时表示的是v2。

js
lerpVectors(v1: Vector3, v2: Vector3, alpha: Float): this

参数:

  • v1:起始的Vector3。
  • v2:朝着进行插值的Vector3。
  • alpha:插值因数,其范围通常在[0, 1]闭区间。

返回值:返回此向量设置为在v1和v2之间进行线性插值的向量

max()

如果该向量的x值、y值或z值小于所传入v的x值、y值或z值, 则将该值替换为对应的最大值。

js
max(v: Vector3): this

参数:

  • v:界限向量

返回值:返回调用对象本身

min()

如果该向量的x值、y值或z值大于所传入v的x值、y值或z值, 则将该值替换为对应的最小值。

js
min(v: Vector3): this

参数:

  • v:界限向量

返回值:返回调用对象本身

multiply()

将该向量与所传入的向量v进行相乘。

js
multiply(v: Vector3): this

参数:

  • v:需要相乘的向量

返回值:返回调用对象本身

multiplyScalar()

将该向量与所传入的标量s进行相乘。

js
multiplyScalar(s: Float): this

参数:

  • s:需要相乘的标量

返回值:返回调用对象本身

multiplyVectors()

按照分量顺序,将该向量设置为和a * b相等。

js
multiplyVectors(a: Vector3, b: Vector3): this

参数:

  • a:需要相乘的向量
  • b:需要相乘的向量

返回值:返回调用对象本身

negate()

向量取反,即: x = -x, y = -y , z = -z。

js
negate(): this

返回值:返回调用对象本身

normalize()

将该向量转换为单位向量(unit vector), 也就是说,将该向量的方向设置为和原向量相同,但是其长度(length)为1。

js
normalize(): this

返回值:返回调用对象本身

project()

将此向量(坐标)从世界空间投影到相机的标准化设备坐标 (NDC) 空间。

js
project(camera: Camera): this

参数:

  • camera:在投影中使用的摄像机。

返回值:返回调用对象本身

projectOnPlane()

Projects 通过从该向量减去投影到平面法线上的向量,将该向量投影到平面上。

js
projectOnPlane(planeNormal: Vector3): this

参数:

  • planeNormal:表示平面法线的向量

返回值:返回调用对象本身

projectOnVector()

投影(Projects)该向量到向量v上。

js
projectOnVector(v: Vector3): this

参数:

  • v:被投影的向量

返回值:返回调用对象本身

reflect()

将该向量设置为对指定 normal 法线的表面的反射向量。假设法线具有单位长度。

js
reflect(normal: Vector3): this

参数:

  • normal:反射面法线

返回值:返回调用对象本身

round()

向量中的分量四舍五入取整为最接近的整数值。

js
round(): this

返回值:返回调用对象本身

roundToZero()

向量中的分量朝向0取整数(若分量为负数则向上取整,若为正数则向下取整)。

js
roundToZero(): this

返回值:返回调用对象本身

set()

设置该向量的x、y、z分量。

js
set(x: Float, y: Float, z: Float): this

参数:

  • x:分量x的新值
  • y:分量y的新值
  • z:分量z的新值

返回值:返回调用对象本身

setComponent()

单独设置向量的分量

若index为 0 则设置 x 值为 value。 若index为 1 则设置 y 值为 value。 若index为 2 则设置 z 值为 value。

js
setComponent(index: Integer, value: Float): this

参数:

  • index:0、1 或 2。
  • value:分量的新值

返回值:返回调用对象本身

setFromCylindrical()

从圆柱坐标c中设置该向量。

js
setFromCylindrical(c: Cylindrical): this

参数:

  • c:圆柱坐标

返回值:返回调用对象本身

setFromCylindricalCoords()

从圆柱坐标中的radius、theta和y设置该向量。

js
setFromCylindricalCoords(radius: Float, theta: Float, y: Float): this

参数:

  • radius:从原点到x-z平面上一点的距离
  • theta:在x-z平面内的逆时针角度,以z轴正方向的计算弧度
  • y:x-z平面以上的高度

返回值:返回调用对象本身

setFromEuler()

根据指定的Euler Angle的x、y、z分量来设置该向量的x、y、z分量。

js
setFromEuler(euler: Euler ): this

参数:

  • euler:欧拉角

返回值:返回调用对象本身

setFromMatrixColumn()

从传入的四阶矩阵matrix由index指定的列中, 设置该向量的x值、y值和z值。

js
setFromMatrixColumn(matrix: Matrix4, index: Integer): this

参数:

  • matrix:四阶矩阵
  • index:下标

返回值:返回调用对象本身

setFromMatrix3Column()

从传入的三阶矩阵 matrix 由 index 指定的列中,设置该向量的 x 值、y 值和 z 值。

js
setFromMatrix3Column(matrix: Matrix3, index: Integer): this

参数:

  • matrix:三阶矩阵
  • index:下标

setFromMatrixPosition()

从变换矩阵(transformation matrix)m中, 设置该向量为其中与位置相关的元素。

js
setFromMatrixPosition(m: Matrix4): this

参数:

  • m:变换矩阵

返回值:返回调用对象本身

setFromMatrixScale()

从变换矩阵(transformation matrix)m中, 设置该向量为其中与缩放相关的元素。

js
setFromMatrixScale(m: Matrix4): this

参数:

  • m:变换矩阵

返回值:返回调用对象本身

setFromSpherical()

从球坐标s中设置该向量。

js
setFromSpherical(s: Spherical): this

参数:

  • s:球坐标

返回值:返回调用对象本身

setFromSphericalCoords()

从球坐标中的radius、phi和theta设置该向量。

js
setFromSphericalCoords(radius: Float, phi: Float, theta: Float): this

参数:

  • radius:半径值,或者说从该点到原点的 Euclidean distance(欧几里得距离,即直线距离)
  • phi:与 y (up) 轴的极角(以弧度为单位)
  • theta:绕 y (up) 轴的赤道角(方位角)(以弧度为单位)

返回值:返回调用对象本身

setLength()

设置原向量的长度

js
setLength(l: Float): this

参数:

  • l:修改的新长度

返回值:返回调用对象本身

setScalar()

将该向量的x、y和z值同时设置为等于传入的标量scalar。

js
setScalar(scalar : Float): this

参数:

  • scalar:一个标量,会同时赋值给向量的三个分量

返回值:返回调用对象本身

setX()

修改向量的分量x

js
setX(x: Float): this

参数:

  • x:分量x的新值

返回值:返回调用对象本身

setY()

修改向量的分量y

js
setX(y: Float): this

参数:

  • y:分量y的新值

返回值:返回调用对象本身

setZ()

修改向量的分量z

js
setX(z: Float): this

参数:

  • z:分量z的新值

返回值:返回调用对象本身

sub()

从该向量减去向量v。

js
sub(v: Vector3): this

参数:

  • v:需要被减的向量

返回值:返回调用对象本身

subScalar()

向量的每个分量的值都减去标量s

js
subScalar(s: Float): this

参数:

  • s:需要被减的标量

返回值:返回调用对象本身

subVectors()

将该向量设置为a - b。

js
subVectors(a: Vector3, b: Vector3): this

参数:

  • a:减数向量
  • b:被减数向量

返回值:返回调用对象本身

toArray()

将向量转化为数组

js
toArray(array: Array, offset: Integer): Array

参数:

  • array:(可选)被用于存储向量的数组。如果这个值没有传入,则将创建一个新的数组。
  • offset:(可选) 数组中元素的偏移量。

返回值:返回一个数组[x, y ,z],或者将x、y和z复制到所传入的array中。

transformDirection()

通过传入的矩阵(m的左上角3 x 3子矩阵)变换向量的方向, 并将结果进行normalizes(归一化)。

js
transformDirection(m: Matrix4): this

参数:

  • m:四维矩阵

返回值:返回调用对象本身

unproject()

将此向量(坐标)从相机的标准化设备坐标 (NDC) 空间投影到世界空间。

js
unproject(camera: Camera ): this

参数:

  • camera:在投影中使用的摄像机。

返回值:返回调用对象本身

random()

将该向量的每个分量(x、y、z)设置为介于 0 和 1 之间的伪随机数,不包括 1。

js
random(): this

返回值:返回调用对象本身

MIT Licensed