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.向量点乘、叉乘

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

  • 5.矩阵

  • 6.射线

  • 7.包围盒

  • 8.第一、三人称漫游

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

  • 10.CannonJS物理引擎

    • 1. 物理引擎CannonJS简介和引入
    • 2. CannonJS自由落体计算
    • 3. 练习-threejs可视化cannon计算结果
    • 4. CannonJS模拟乒乓球下落反弹
    • 5. 练习-修改小球参数
    • 6. 练习-点按钮重复下落
    • 7. CannonJS碰撞事件,碰撞声音
    • 8. 长方体Box碰撞体(箱子下落)
    • 9. 练习题-外部gltf箱子模型
      • 10. 凸多面体ConvexPolyhedron
    • Three.js进阶教程
    • 10.CannonJS物理引擎
    郭隆邦
    2023-10-11
    目录

    9. 练习题-外部gltf箱子模型

    # 练习题-外部gltf箱子模型

    继续上节课箱子案例的讲解,做一个练习题,你可以尝试把上节课threejs代码创建的箱子模型替换为外部gltf模型。

    // 箱子网格模型
    const geometry = new THREE.BoxGeometry(1.0,0.4,0.6);
    const material = new THREE.MeshLambertMaterial({
        map: new THREE.TextureLoader().load('./箱子.jpg'),
    });
    const mesh = new THREE.Mesh(geometry, material);
    
    import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
    const loader = new GLTFLoader();
    const gltf = await loader.loadAsync("../箱子.glb")
    const mesh = gltf.scene;//获取箱子网格模型
    mesh.position.y = 5;
    

    # 包围盒Box3计算模型尺寸

    如果你想知道箱子gltf模型尺寸,可以在Blender中测量,当然也可以用包围盒Box3自动计算外部gltf模型长宽高尺寸。

    用包围盒计算好处就是,你加载的模型不管长宽高是多少,都可以代码自动计算出来。

    如果关于包围盒知识点忘记了,你可以参考前面基础内容对包围盒 (opens new window)讲解。

    const box3 = new THREE.Box3();
    box3.expandByObject(mesh);//计算模型包围盒
    const size = new THREE.Vector3();
    box3.getSize(size);//包围盒计算箱子的尺寸
    

    根据包围盒计算的结果,设置Box的尺寸。

    // 物理箱子
    const body = new CANNON.Body({
        ...
        shape: new CANNON.Box(new CANNON.Vec3(size.x/2, size.y/2, size.z/2))
    });
    

    # 外部gltf箱子模型局部坐标原点问题

    你可以打开课件中两个模型文件箱子.glb与箱子-坐标原点不于中心重合.glb,查看自身坐标原点相对自身几何中心的位置,对比下不同。箱子.glb模型的局部坐标原点与自身几何中心重合,另一个模型不重合。

    你可以对比下,两个箱子模型文件在代码中的表现。你会发现,模型局部坐标原点相对自身位置,会影响代码结果。

    这提醒我们,在以后的开发中,Blender或其他人任何三维建模软件导出模型的时候,要注意模型的坐标原点位置。

    // const gltf = await loader.loadAsync("../箱子.glb")
    const gltf = await loader.loadAsync("../箱子-坐标原点不于中心重合.glb")
    
    8. 长方体Box碰撞体(箱子下落)
    10. 凸多面体ConvexPolyhedron

    ← 8. 长方体Box碰撞体(箱子下落) 10. 凸多面体ConvexPolyhedron→

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