Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 1. 数学几何计算基础

  • 2.位移、速度、加速度(向量)

  • 3.向量点乘、叉乘

    • 1. 向量点乘dot
    • 2. 点乘练习-计算三角形夹角
    • 3. 点乘判断物体在人前或人后
    • 4. 点乘判断是否在扇形内
    • 5. 向量叉乘cross
    • 6. 叉乘判断人左右
    • 7. 点乘判断平行向量方向异同
    • 8. 判断两个点是否在线段同一侧
    • 9. 叉乘计算三角形法线
      • 10. 叉乘计算三角形面积
      • 11. 练习—计算物体的表面积
      • 12. 点到直线的距离
    • 4.四元数、欧拉角(角度姿态)

    • 5.矩阵

    • 6.射线

    • 7.包围盒

    • 8.第一、三人称漫游

    • 9.漫游-八叉树碰撞检测

    • 10.CannonJS物理引擎

    • Three.js进阶教程
    • 3.向量点乘、叉乘
    郭隆邦
    2023-06-11
    目录

    9. 叉乘计算三角形法线

    # 叉乘计算三角形法线

    利用前面讲解的threejs叉乘.cross()知识,做一个练习题,具体内容就是计算三角形的法线或说着垂线。

    # 已知条件

    const geometry = new THREE.BufferGeometry();
    // 两个三角形的顶点坐标
    const vertices = new Float32Array([
        0, 0, 0, //顶点1坐标
        50, 0, 0, //顶点2坐标
        0, 100, 0, //顶点3坐标
        0, 0, 10, //顶点4坐标
        0, 0, 100, //顶点5坐标
        50, 0, 10, //顶点6坐标
    ]);
    geometry.attributes.position = new THREE.BufferAttribute(vertices, 3);
    

    # 叉乘.cross()计算法线

    通过前面叉乘学习,咱们知道,向量a、b叉乘得到的向量c,会垂直于向量a和b构成的平面。

    思路非常简单,可以把通过三角形的三个顶点构建两个向量,两个向量叉乘,就会得到一个垂直三角形的向量c。不过注意一点,如果两个向量,随意构建,实际计算结果向量c虽然都垂直a和b但是方向可能有两种情况。所以,三个顶点构建两个向量,按照三角形顶点的顺序,构建1指向2的向量,2指向3的向量,这样可以向量叉乘结果可以反应三角形三个点位置顺序关系。

    // 已知三角形三个顶点的坐标,计算三角形法线方向
    const p1 = new THREE.Vector3(0, 0, 0);
    const p2 = new THREE.Vector3(50, 0, 0);
    const p3 = new THREE.Vector3(0, 100, 0);
    
    // 三个顶点构建两个向量,按照三角形顶点的顺序,构建1指向2的向量,2指向3的向量
    const a = p2.clone().sub(p1);
    const b = p3.clone().sub(p2);
    
    const c = a.clone().cross(b);
    c.normalize();//向量c归一化表示三角形法线方向
    
    // 可视化向量a和b叉乘结果:向量c
    const arrow = new THREE.ArrowHelper(c, p3, 50, 0xff0000);
    mesh.add(arrow);
    

    # 第二组三角形数据测试法线计算

    const p1 = new THREE.Vector3(0, 0, 10);
    const p2 = new THREE.Vector3(0, 0, 100);
    const p3 = new THREE.Vector3(50, 0, 10);
    
    8. 判断两个点是否在线段同一侧
    10. 叉乘计算三角形面积

    ← 8. 判断两个点是否在线段同一侧 10. 叉乘计算三角形面积→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式