由于三维向量涉及的难点较多区分两节来书写
Vector3 有三个属性六十九个方法
Vector3( x : Float, y : Float, z : Float ) x - 向量的x值,默认为0。 y - 向量的y值,默认为0。 z - 向量的z值,默认为0。 创建一个新的Vector3。
- projectOnVector ( v : Vector3 ) : this 在 Three.js 中,projectOnVector 是 Vector3 类中的一个方法,用于将当前向量投影到另一个向量上。让我们逐步解析这个方法的含义和用法。
js
// 创建两个向量
const vectorA = new THREE.Vector3(3, 4, 0);
const vectorB = new THREE.Vector3(1, 1, 0); // 这是 X 轴上的单位向量
// 将 vectorA 投影到 vectorB 上
vectorA.projectOnVector(vectorB);
console.log(vectorA); // 输出投影后的结果 { "x": 3.5, "y": 3.5, "z": 0 }
- reflect ( normal : Vector3 ) : this 在 Three.js 中,reflect 是 Vector3 类中的一个方法,用于计算当前向量相对于指定法线向量的反射向量。这个方法在计算光照、反射效果和物理模拟中非常有用。
js
// 创建向量
const incidentVector = new THREE.Vector3(3, -4, 0);
const normalVector = new THREE.Vector3(0, 1, 0); // 法线向量
// 计算反射向量
incidentVector.reflect(normalVector);
console.log(incidentVector); // 输出反射后的向量 (3, 4, 0)
- round () : this 向量中的分量四舍五入取整为最接近的整数值。
- roundToZero () : this 向量中的分量朝向0取整数(若分量为负数则向上取整,若为正数则向下取整)。
- set ( x : Float, y : Float, z : Float ) : this 设置该向量的x、y 和 z 分量。
- setComponent ( index : Integer, value : Float ) : this index - 0、1 或 2。 value - Float 若index为 0 则设置 x 值为 value。 若index为 1 则设置 y 值为 value。 若index为 2 则设置 z 值为 value。
- setFromCylindrical ( c : Cylindrical ) : this 从圆柱坐标c中设置该向量。
js
// 创建一个 Cylindrical 实例
const cylindrical = new THREE.Cylindrical(5, Math.PI / 4, 2);
// 创建一个 Vector3 实例
const vector = new THREE.Vector3();
// 使用 setFromCylindrical 方法设置向量
vector.setFromCylindrical(cylindrical);
console.log(vector); // 输出转换后的笛卡尔坐标 { "x": 3.5355339059327373, "y": 2, "z": 3.5355339059327378 }
- setFromCylindricalCoords ( radius : Float, theta : Float, y : Float ) : this 在 Three.js 中,setFromCylindricalCoords 是 Vector3 类中的一个方法,用于根据给定的圆柱坐标参数(半径、极角和高度)设置三维向量的值。与 setFromCylindrical 方法不同,setFromCylindricalCoords 直接接受三个参数,而不是一个 Cylindrical 对象。
js
// 创建一个 Vector3 实例
const vector = new THREE.Vector3();
// 使用 setFromCylindricalCoords 方法设置向量
vector.setFromCylindricalCoords(4, Math.PI / 3, 1);
console.log(vector); // 输出转换后的笛卡尔坐标 { "x": 3.4641016151377544, "y": 1, "z": 2.0000000000000004 }
- setFromEuler ( euler : Euler ) : this 在 Three.js 中,setFromEuler 是 Vector3 类中的一个方法,用于根据给定的欧拉角(Euler angles)设置三维向量的值。这个方法通常用于将向量的方向设置为与给定的欧拉角一致。在 Three.js 中,围绕中心点 (0, 0, 0) 旋转点或物体时,使用
setFromEuler
方法提供了一种简便的方式来应用欧拉角旋转。这样可以灵活地控制物体的方向和位置,适用于许多3D应用场景。
js
// 创建一个 Euler 实例
const euler = new THREE.Euler(Math.PI / 4, Math.PI / 4, 0); // 例如,45度绕 X 和 Y 轴旋转
// 创建一个 Vector3 实例
const vector = new THREE.Vector3(1, 0, 0); // 初始向量
// 使用 setFromEuler 方法设置向量
vector.setFromEuler(euler);
console.log(vector); // 输出根据欧拉角旋转后的向量 { "x": 0.7853981633974483, "y": 0.7853981633974483, "z": 0 }
- setFromMatrixColumn ( matrix : Matrix4, index : Integer ) : this 是 Three.js 中
Vector3
类的方法,允许你从一个 4x4 矩阵的指定列中设置向量的值。这在3D图形编程中非常有用,尤其是在处理变换矩阵(例如,位置、旋转和缩放)时。
js
// 创建一个 4x4 矩阵
const matrix = new THREE.Matrix4();
matrix.set(
1, 0, 0, 0, // 第一列
0, 1, 0, 0, // 第二列
0, 0, 1, 0, // 第三列
10, 20, 30, 1 // 平移部分
);
// 创建一个 Vector3 实例
const vector = new THREE.Vector3();
// 从矩阵的第一列设置向量
vector.setFromMatrixColumn(matrix, 0);
console.log(vector); // 输出: Vector3 { x: 1, y: 0, z: 0 }
- setFromMatrix3Column ( matrix : Matrix3, index : Integer ) : this 从传入的三阶矩阵 matrix 由 setFromMatrixPosition ( m : Matrix4 ) : this 指定的列中,设置该向量的 x 值、y 值和 z 值。
- setFromMatrixPosition ( m : Matrix4 ) : this setFromMatrixPosition 是 Three.js 中 Vector3 类的方法,用于从 4x4 矩阵中提取平移部分并将其设置为向量的值。这在处理 3D 变换(如物体的位置)时非常有用。
js
// 创建一个 4x4 矩阵
const matrix = new THREE.Matrix4();
matrix.set(
1, 0, 0, 0, // 第一列
0, 1, 0, 0, // 第二列
0, 0, 1, 0, // 第三列
10, 20, 30, 1 // 平移部分
);
// 创建一个 Vector3 实例
const vector = new THREE.Vector3();
// 从矩阵中设置向量
vector.setFromMatrixPosition(matrix);
console.log(vector); // 输出: Vector3 { x: 10, y: 20, z: 30 }
- setFromMatrixScale ( m : Matrix4 ) : this 是 Three.js 中 Vector3 类的方法,用于从一个 4x4 矩阵中提取缩放部分并将其设置为向量的值。这在处理 3D 变换(如物体的缩放)时非常有用。
js
// 创建一个 4x4 矩阵
const matrix = new THREE.Matrix4();
matrix.set(
2, 0, 0, 0, // 第一列 (X轴缩放为2)
0, 3, 0, 0, // 第二列 (Y轴缩放为3)
0, 0, 4, 0, // 第三列 (Z轴缩放为4)
10, 20, 30, 1 // 平移部分
);
// 创建一个 Vector3 实例
const vector = new THREE.Vector3();
// 从矩阵中设置向量的缩放值
vector.setFromMatrixScale(matrix);
console.log(vector); // 输出: Vector3 { x: 2, y: 3, z: 4 }
- setFromSpherical ( s : Spherical ) : this setFromSpherical 方法用于 Three.js 中的 Vector3 类,将向量的值设置为球坐标系中指定的球坐标。这使得在三维空间中根据极坐标(半径、极角和方位角)轻松生成向量。
js
// 创建一个 Spherical 实例
const spherical = new THREE.Spherical(5, Math.PI / 4, Math.PI / 2); // 半径为 5,极角为 45度,方位角为 90度
// 创建一个 Vector3 实例
const vector = new THREE.Vector3();
// 从球坐标设置向量
vector.setFromSpherical(spherical);
// 这里的 z 不是0但是是一个无限接近0的数值,通常在three中表示0
console.log(vector); // 输出: Vector3 { "x": 3.5355339059327373, "y": 3.5355339059327378, "z": 2.164890140588733e-16 }
- setFromSphericalCoords ( radius : Float, phi : Float, theta : Float ) : this 从球坐标中的radius、phi和theta设置该向量。
- setLength ( l : Float ) : this 将该向量的方向设置为和原向量相同,但是长度(length)为l。
js
// 创建一个 Vector3 实例
const vector = new THREE.Vector3(1, 2, 3);
// 输出原始向量
console.log("原始向量:", vector); // 输出: Vector3 { x: 1, y: 2, z: 3 }
// 使用 setLength 方法设置新的长度
vector.setLength(5);
// 输出修改后的向量
console.log("修改后的向量:", vector); // 输出: Vector3 { x: 1.0, y: 2.0, z: 3.0 } (方向保持不变,长度为 5)
- setScalar ( scalar : Float ) : this 将该向量的x、y和z值同时设置为等于传入的scalar。
js
// 创建一个 Vector3 实例
const vector = new THREE.Vector3(1, 2, 3);
// 输出原始向量
console.log("原始向量:", vector); // 输出: Vector3 { x: 1, y: 2, z: 3 }
// 使用 setScalar 方法设置所有分量为相同的值
vector.setScalar(5);
// 输出修改后的向量
console.log("修改后的向量:", vector); // 输出: Vector3 { x: 5, y: 5, z: 5 }
- setX ( x : Float ) : this 将向量中的x值替换为x。
- setY ( y : Float ) : this 将向量中的y值替换为y。
- setZ ( z : Float ) : this 将向量中的z值替换为z。
- sub ( v : Vector3 ) : this 从该向量减去向量v。
- subScalar ( s : Float ) : this 从该向量的x、y和z中减去标量s。
- subVectors ( a : Vector3, b : Vector3 ) : this 将该向量设置为a - b。
- toArray ( array : Array, offset : Integer ) : Array array - (可选)被用于存储向量的数组。如果这个值没有传入,则将创建一个新的数组。 offset - (可选) 数组中元素的偏移量。 返回一个数组[x, y ,z],或者将x、y和z复制到所传入的array中。
- transformDirection ( m : Matrix4 ) : this 通过传入的矩阵(m的左上角3 x 3子矩阵)变换向量的方向, 并将结果进行normalizes(归一化)。
- unproject ( camera : Camera ) : this camera --- 在投影中使用的摄像机。 将此向量(坐标)从相机的标准化设备坐标 (NDC) 空间投影到世界空间。
- random () : this 将该向量的每个分量(x、y、z)设置为介于 0 和 1 之间的伪随机数,不包括 1。