three Vector3 三维向量(下)

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

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。
相关推荐
腾讯TNTWeb前端团队1 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰4 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪4 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪5 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy5 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom6 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom6 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom6 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom6 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom6 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试