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

    • 1. threejs坐标系与三角函数
    • 2. 三维向量Vector3简介
    • 3. 向量大小(Vector3长度.length())
    • 4. 向量方向(归一化.normalize)
    • 5. 相机沿着视线方向运动
    • 6. 箭头ArrowHelper
    • 2.位移、速度、加速度(向量)

    • 3.向量点乘、叉乘

    • 4.四元数、欧拉角(角度姿态)

    • 5.矩阵

    • 6.射线

    • 7.包围盒

    • 8.第一、三人称漫游

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

    • 10.CannonJS物理引擎

    • Three.js进阶教程
    • 1. 数学几何计算基础
    郭隆邦
    2023-06-04
    目录

    6. 箭头ArrowHelper

    # 箭头ArrowHelper

    基础课程中给大家介绍过一个three.js辅助开发的类,就是xyz三维坐标系AxesHelper,这节课给大家介绍一个新的辅助类,three.js的箭头ArrowHelper。

    介绍ArrowHelper的目的是,后面几何计算的过程或结果,可以用ArrowHelper可视化表示出来,这样更容易理解抽象的概念或抽象的数学计算。

    # 两个小球可视化A、B两点位置

    const A = new THREE.Vector3(0, 30, 0);//A点
    const B = new THREE.Vector3(80, 0, 0);//B点
    
    // 绿色小球可视化A点位置
    const AMesh = createSphereMesh(0x00ff00,2);
    AMesh.position.copy(A);
    // 红色小球可视化B点位置
    const BMesh = createSphereMesh(0xff0000,2);
    BMesh.position.copy(B);
    
    const group = new THREE.Group();
    group.add(AMesh,BMesh);
    
    function createSphereMesh(color,R) {
        const geometry = new THREE.SphereGeometry(R);
        const material = new THREE.MeshLambertMaterial({
            color: color,
        });
        const mesh = new THREE.Mesh(geometry, material);
        return mesh;
    }
    

    # 生成一个A指向B的箭头

    // 绘制一个从A指向B的箭头
    const AB = B.clone().sub(A);
    const L = AB.length();//AB长度
    const dir = AB.clone().normalize();//单位向量表示AB方向
    
    // 生成箭头从A指向B
    const arrowHelper = new THREE.ArrowHelper(dir, A, L)
    group.add(arrowHelper);
    

    # 箭头可视化一个立方体的法线方向

    const geometry = new THREE.BoxGeometry(50, 50, 50);
    const material = new THREE.MeshLambertMaterial({
        color: 0x00ffff,
    });
    const mesh = new THREE.Mesh(geometry, material);
    
    const p = mesh.geometry.attributes.position;
    const n = mesh.geometry.attributes.normal;
    const count = p.count;//顶点数量
    for (let i = 0; i < count; i++) {
        // 顶点位置O
        const O = new THREE.Vector3(p.getX(i), p.getY(i), p.getZ(i));
        // 顶点位置O对应的顶点法线
        const dir = new THREE.Vector3(n.getX(i), n.getY(i), n.getZ(i));
        // 箭头可视化顶点法线
        const arrowHelper = new THREE.ArrowHelper(dir, O, 20);
        mesh.add(arrowHelper);
    }
    

    # 总结

    一般做一些数学计算的时候,可以借助小球、箭头等方式可视化你的几何数据,通过具象的图像,有助于理解抽象的代码。

    5. 相机沿着视线方向运动
    1. 匀速动画(向量表示速度)

    ← 5. 相机沿着视线方向运动 1. 匀速动画(向量表示速度)→

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