three Vector3 三维向量(下)

0 阅读6分钟

由于三维向量涉及的难点较多区分两节来书写

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 类中的一个方法,用于将当前向量投影到另一个向量上。让我们逐步解析这个方法的含义和用法。 1729475475861.png 1729475518393.png
    // 创建两个向量
    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 类中的一个方法,用于计算当前向量相对于指定法线向量的反射向量。这个方法在计算光照、反射效果和物理模拟中非常有用。 1729476548878.png
    // 创建向量
    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中设置该向量。 1729476757866.png
    // 创建一个 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 对象。
    // 创建一个 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应用场景。 1729478169381.png 1729478394149.png
    // 创建一个 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图形编程中非常有用,尤其是在处理变换矩阵(例如,位置、旋转和缩放)时。
    // 创建一个 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 变换(如物体的位置)时非常有用。
    // 创建一个 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 变换(如物体的缩放)时非常有用。
    // 创建一个 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 类,将向量的值设置为球坐标系中指定的球坐标。这使得在三维空间中根据极坐标(半径、极角和方位角)轻松生成向量。 1729479678220.png
    // 创建一个 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。 1729479518376.png
    // 创建一个 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。
    // 创建一个 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。