当前位置: 首页 > news >正文

ThreeJs学习-层级模型

ThreeJs所有的模型就是一个树结构

  1. Group层级模型

    //创建两个网格模型mesh1、mesh2
    const geometry = new THREE.BoxGeometry(20, 20, 20);
    const material = new THREE.MeshLambertMaterial({color: 0x00ffff});
    const group = new THREE.Group();
    const mesh1 = new THREE.Mesh(geometry, material);
    const mesh2 = new THREE.Mesh(geometry, material);
    mesh2.translateX(25);
    //把mesh1型插入到组group中,mesh1作为group的子对象
    group.add(mesh1);
    //把mesh2型插入到组group中,mesh2作为group的子对象
    group.add(mesh2);
    //把group插入到场景中作为场景子对象
    scene.add(group);

  2. name可以给模型命名

  3. traverse()方法递归遍历所有的模型

    // 递归遍历model包含所有的模型节点
    model.traverse(function(obj) {console.log('所有模型节点的名称',obj.name);// obj.isMesh:if判断模型对象obj是不是网格模型'Mesh'if (obj.isMesh) {//判断条件也可以是obj.type === 'Mesh'obj.material.color.set(0xffff00);}
    });
    

  4. 查找某个具体的模型.getObjectByName()

    // 返回名.name为"4号楼"对应的对象
    const nameNode = scene.getObjectByName ("4号楼");
    nameNode.material.color.set(0xff0000);
    

  • 本地坐标(局部坐标)和世界坐标

    // mesh的世界坐标就是mesh.position与group.position的累加
    const mesh = new THREE.Mesh(geometry, material); 
    mesh.position.set(50, 0, 0);
    const group = new THREE.Group();
    group.add(mesh);
    group.position.set(50, 0, 0);
  • 改变子对象的.postition,子对象的在3D空间的坐标会发生改变。

  • 改变父对象的.position,子对象的坐标也会改变。(父对象的坐标改变,子对象的坐标也改变)

  • 本地坐标就是模型本身position属性,世界坐标就是模型本身加上父对象的.position

  • getWorldPosition()获取世界坐标

    // 声明一个三维向量用来表示某个坐标,来存储世界坐标
    const worldPosition = new THREE.Vector3();
    // 获取mesh的世界坐标
    mesh.getWorldPosition(worldPosition);
    console.log('世界坐标',worldPosition);
    console.log('本地坐标',mesh.position);
  • 移除对象remove

    // 删除父对象group的子对象网格模型mesh1
    group.remove(mesh1);
    scene.remove(ambient);//移除场景中环境光
    scene.remove(model);//移除场景中模型对象
  • 模型和材质的隐藏和显示

    mesh.visible = false;  //模型隐藏
    material.visible = true  //材质显示

    如果多个模型使用同一个材质(共享材质),这个材质隐藏后,那么使用这个材质的模型都会隐藏。


http://www.mrgr.cn/news/9190.html

相关文章:

  • 前端面试宝典【设计模式】【5】
  • 短剧系统搭建:从零搭建高效创意内容平台教程,源码分享+正版片源授权指南
  • RING总线(环形总线)Intel大小核的由来
  • 『功能项目』禁止射线穿透行为【05】
  • SSRF漏洞(一)
  • 设计模式-结构型模式-代理模式
  • C++ | Leetcode C++题解之第352题将数据流变为多个不想交区间
  • 使用miniconda构建数据科学环境
  • [Linux][软件]CentOS 系统部署 RabbitMQ
  • AI可预测地震,科技的“预知未来”?
  • 虚拟机桥接模式下设置静态IP
  • react redux异步请求
  • Python计算机视觉 第3章-图像到图像的映射
  • 春游c++
  • Web3链上聚合器声呐已全球上线,开启区块链数据洞察新时代
  • HTML实现俄罗斯方块
  • 每天五分钟深度学习:从数学角度分析逻辑回归算法损失函数的来源
  • Python爬虫—常用的网络爬虫工具推荐
  • 英伟达与联发科合作生产支持G-SYNC完整功能的显示器 不需要英伟达专有模块
  • 【AI趋势9】开源普惠