Vector3 三维向量

Vector3 是表示在空间上的三维向量, 运算的基本逻辑跟平面的二维向量 Vector2 相仿, 只是多了z分量上的运算. 代码逻辑不再展示, 可参考 Vector2 的, 亦可查看源码.

function Vector3( x, y, z ) { } var a = new THREE.Vector3(1, 0, 0), b = new THREE.Vector3(0, 1, 0); console.log( a.cross(b) ); // { x: 0, y: 0, z: 1 }

Attributes

x : Float

Default value : 0
Description : 在 x 轴上的坐标值.

y : Float

Default value : 0
Description : 在 y 轴上的坐标值.

z : Float

Default value : 0
Description : 在 z 轴上的坐标值.

isVector3 : Boolean

Default value : true (只读)
Description : 类型是否为三维向量 Vector3.

Methods

set( x, y, z ) : this
x Float 在x轴上的坐标值
y Float 在y轴上的坐标值
z Float 在z轴上的坐标值

对 x, y, z 赋值.

setX( x ),   setY( y ),   setZ( z ) : this
x / y / z Float 在 x轴 / y轴 / z轴 上的坐标值

设置在 x轴 / y轴 / z轴 上的坐标值.

setScalar( scalar ) : this
scalar Float 数值

设置在x, y, z轴上的坐标值: 同一个数值 scalar.

setComponent( index, value ) : this
index 0 / 1 / 2 索引
value Float 数值

根据索引来对元素进行赋值:0对x赋值, 1对y赋值, 2对z赋值.

getComponent( index ) : x, y
index Float 索引

根据索引来获取对应的元素:从0得到x, 从1得到y, 从2得到z.

add( v ),   sub( v ),   multiply( v ),   divide( v ) : this
v Vector3 三维向量

自身与另一个三维向量进行加法, 减法, 相同排序的元素相乘, 相除(向量不能直接除) 的运算. 都是自身的 x, y, z 分别和另一个三维向量的 x, y, z 进行相加, 相减, 相乘, 相除运算.
warn:
THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.
THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.
THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ).
警告:
add() 方法只传一个参数, 如传入两个参数, 请用 addVectors( a, b ) 代替.
sub() 方法只传一个参数, 如传入两个参数, 请用 subVectors( a, b ) 代替.
multiply() 方法只传一个参数, 如传入两个参数, 请用 multiplyVectors( a, b ) 代替.

addScalar( s ),   subScalar( s ),   multiplyScalar( s ),   divideScalar( s ) : this
s Float 数值

x, y, z 分量都加上, 减去, 乘以, 除以同一个数值. 当进行乘除运算时, 相当于把自身延长或缩短.

addVectors( a, b ),   subVectors( a, b ),   multiplyVectors( a, b ) : this
a, b Vector3 三维向量

对两个三维向量求和/差, 乘法是相同排序的元素相乘, 计算结果再赋予自身.

addScaledVector( v, s ) : this
v Vector3 三维向量
s Float 数值

v跟s进行数乘后, 再与自身求和.

applyEuler( euler ) : this
euler Euler 欧拉角

var quaternion = new Quaternion();
this.applyQuaternion( quaternion.setFromEuler( euler ) ) 欧拉角转换.

applyAxisAngle( axis, angle ) : this
axis Vector3 旋转轴
angle Float 角度

沿着轴旋转一个角度.

applyMatrix3( m ) : this
m Matrix3 三维矩阵

var x = this.x, y = this.y, z = this.z;
var e = m.elements;
this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;
this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;
this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;
与一个三维矩阵相乘.

applyMatrix4( m ) : this
m Matrix4 四维矩阵

var x = this.x, y = this.y, z = this.z;
var e = m.elements;
var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );
this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;
this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;
this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;
与一个四维矩阵相乘.

applyQuaternion( q ) : this
q Quaternion 四元数

var x = this.x, y = this.y, z = this.z;
var qx = q.x, qy = q.y, qz = q.z, qw = q.w;

var ix = qw * x + qy * z - qz * y;
var iy = qw * y + qz * x - qx * z;
var iz = qw * z + qx * y - qy * x;
var iw = - qx * x - qy * y - qz * z;

this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;
this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;
this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;
四元数转换.

project( camera ) : this
camera Camera 摄像机

在摄像机中投影.

projectOnVector( vector ) : this
vector Vector3 三维向量

在向量上投影.

projectOnPlane( planeNormal ) : this
planeNormal Vector3 平面法线

v1.copy( this ).projectOnVector( planeNormal );
this.sub( v1 );
在平面上投影. 平面是垂直于法线的平面, 先求出在法线向量上的投影, 再用自身减去这个投影向量, 向量差就是在这平面上的投影.

unproject( camera ) : this
camera Camera 摄像机

取消投影.

transformDirection( ) : this
m Matrix4 四维矩阵

通过一个矩阵( Matrix4 的3×3的子矩阵)来变换方向.

min( v ) : this
v Vector3 三维向量

分别对自身的x, y, z和另 v 的x, y, z求最小值, 然后赋予自身.

max( v ) : this
v Vector3 三维向量

分别对自身的x, y, z和另 v 的x, y, z求最大值, 然后赋予自身.

clamp( min, max ) : this
min Vector3 三维向量
max Vector3 三维向量

this.x = Math.max( min.x, Math.min( max.x, this.x ) );
this.y = Math.max( min.y, Math.min( max.y, this.y ) );
this.z = Math.max( min.z, Math.min( max.z, this.z ) );
分别对自身的x, y, z求:在二维向量min, max中的分量的限定值. 超过max的x, y, z取max中的分量; 小于min的x, y, z取min的分量; 都不是的取原来自身.

clampScalar( minVal, maxVal ) : this
minVal Float 小的数值
maxVal Float 大的数值

min.set( minVal, minVal, minVal ); max.set( maxVal, maxVal, maxVal ); this.clamp( min, max ); 分别对自身的x, y, z求:在minVal, maxVal中的限定值. 超过maxVal的取maxVal; 小于minVal的取minVal; 都不是的取原来自身.

clampLength( min, max ) : this
min Float 长度
max Float 长度

this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); 对自身的长度求:在min, max中的限定值. 超过max的取max; 小于min的取min; 都不是的取原来自身.

floor( ) : this

向下取整:分别对x, y, z取小于或等于它的最大整数.

ceil( ) : this

向上取整:分别对x, y, z取大于或等于它的最大整数.

round( ) : this

分别对x, y, z四舍五入.

roundToZero( ) : this

向零取整:x, y, z小于0时, 取大于或等于它的最大整数; 大于0时, 取小于或等于它的最大整数.

negate( ) : this

分别对x, y, z取负.

dot( v ) : Float
v Vector3 三维向量

点积(内积).

lengthSq( ) : Float

向量的长度的平方.

length( ) : Float

向量的长度.

manhattanLength( ) : Float

曼哈顿距离:|x|+|y|+|z|.

normalize( ) : Vector3

归一化长度.

setLength( length ) : this
length Float 长度

设置长度.

lerp( v, alpha ) : this
v Vector3 三维向量
alpha Float Alpha通道

线性插值.

lerpVectors( v1, v2, alpha ) : Vector3
v1 / v2 Vector3 三维向量
alpha Float Alpha通道

两向量的线性插值.

cross( v ) : this
v Vector3 三维向量

自身与 v 进行叉积(外积)运算, 再赋予自身.
warn: THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.
警告: cross() 方法只传一个参数, 如传入两个参数, 请用 crossVectors( a, b ) 代替.

crossVectors( a, b ) : this
a / b Vector3 三维向量

两个三维向量进行叉积(外积)运算, 再赋予自身.

reflect( normal ) : this
normal Vector3 法线

反射

angleTo( v ) : Float
v Vector3 三维向量

自身与 v 的夹角.

distanceTo( v ) : Float
v Vector3 三维向量

自身到 v 的距离.

distanceToSquared( v ) : Float
v Vector3 三维向量

自身到 v 的距离的平方.

manhattanDistanceTo( ) : Float
v Vector3 三维向量

自身到与 v 的曼哈顿距离.

setFromSpherical( s ) : this
s Spherical 球面坐标

从球面坐标 s 来设置自身.

setFromCylindrical( c ) : this
c Cylindrical 柱面坐标

从柱面坐标 c 来设置自身.

setFromMatrixPosition( m ) : this
m Matrix4 变换矩阵

从变换矩阵 m 的位置元素来设置自身.

setFromMatrixScale( m ) : this
m Matrix4 变换矩阵

从变换矩阵 m 的缩放元素来设置自身.

setFromMatrixColumn( m, index ) : this
m Matrix4 变换矩阵
index Integer 索引

根据索引, 从变换矩阵 m 中提取元素来设置自身.

equals( v ) : Boolean
v Vector3 三维向量

自身与 v 是否相等.

fromArray( array, offset ) : this
array Array 数组
offset Int 偏移量索引

从数组中索引为offset开始, 取数赋予自身.

toArray( array, offset ) : Array
array Array 数组
offset Int 偏移量索引

把自身的x, y, z值替换到数组中, 从索引为offset处开始替换.

fromBufferAttribute( attribute, index ) : this
attribute BufferAttribute 属性缓存区
index Int 索引

从attribute中取得索引为index处的坐标赋予自身.
warn: THREE.Vector3: offset has been removed from .fromBufferAttribute().
警告: fromBufferAttribute() 已经不再需要offset这个参数.

clone( ) : Vector3

复制自身.

copy( v ) : this
v Vector3 一个三维向量

把一个三维向量值赋值到自身.

图解API

三维向量的表示, 及它的长度.

空间中的两条向量相减, 得到一条新的三维向量.

向量在另一条向量上的投影. 相减后的向量差就是在平面上的投影.