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系统课程视频
  • 0.学前说明

  • 1.Vue+Three.js基础

  • 2.场景搭建Three+Blender

    • 1. 3D建模软件搭建3D场景
    • 2. Blender下载、安装、中文界面
    • 3. Blender基本操作:旋转缩放平移
    • 4. Blender编辑、保存网格模型
    • 5. GLTF格式简介(Web3D领域JPG)
    • 6. Blender生成gltf,threejs加载
    • 7. Blender导出gltf设置半透明材质
    • 8. 建模软件与threejs坐标系xyz对应
    • 9. 层级模型、获取模型节点
      • 10. 模型材质共享问题
      • 11. 加载gltf,相机设置(收费站)
      • 12. 练习题-相机参数设置(园区)
      • 13. 加载gltf模型相机.lookAt()设置
    • 3.渲染效果提升(材质光照)

    • 4.渲染性能、模型压缩

    • 5.封装、进度条、切视角

    • js 3D可视化
    • 2.场景搭建Three+Blender
    郭隆邦
    2024-03-12
    目录

    9. 层级模型、获取模型节点

    # 层级模型、获取模型节点

    1. 层级模型(树结构)
    2. 获取模型节点

    以Blender为例,从零带领大家了解下Blender、Threejs**层级模型(树结构)**的概念。

    场景中模型比较多的时候,threejs代码怎么快速获取某个模型对象,进行操作。

    # Blender创建一个层级模型

    可以跟着视频操作,动手在Blender创建一个树结构的层级模型。

    实际开发时候,一般美术也需要根据项目情况,把不同的设备模型分类创建、管理。

    1. 模型复制快捷键Shift + D,沿着x轴复制,就输入快捷键x
    2. Blender通过一个目录树管理模型
    3. Blender中平移父对象,子对象跟着平移
    4. 右侧目录,改变模型层级关系(鼠标左键拖动+Shift快捷键)

    # threejs加载层级模型

    log打印,浏览器后台查看gltf.scene数据结构,子对象存储在父对象的.children属性中,threejs中模型的.name属性值对应的就是Blender建模软件目录中的模型名字。

    const loader = new GLTFLoader()
    loader.load('./小区.glb',function(gltf){
        //浏览器控制台查看gltf.scene中模型的层级结构
        console.log('gltf.scene',gltf.scene);
        scene.add(gltf.scene);
    })
    

    # 获取某个模型节点.getObjectByName(name)

    通过模型节点名字获取某个mesh,然后平移。

    // 返回名.name为"1号楼"对应的对象
    const mesh = gltf.scene.getObjectByName("1号楼");
    mesh.position.y += 100;//获取的模型平移
    

    获取某个组对象,平移,所有子对象会跟着平移。

    const group = gltf.scene.getObjectByName("高层");
    group.position.y += 100;//获取的模型平移
    

    # 递归遍历方法.traverse()

    递归遍历gltf所有的模型节点,判断获取的模型是否是网格,如果是的话,就平移y坐标。

    // 递归遍历所有模型节点批量修改材质
    gltf.scene.traverse(function(obj) {
        if (obj.isMesh) {//判断是否是网格模型
            console.log('模型节点',obj);
            console.log('模型节点名字',obj.name);
            obj.position.y += 100;
        }
    });
    
    8. 建模软件与threejs坐标系xyz对应
    10. 模型材质共享问题

    ← 8. 建模软件与threejs坐标系xyz对应 10. 模型材质共享问题→

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