threejs 大场景下,对小模型进行贴图处理

接上篇小模型的删除☞threeJS 大模型中对小模型进行删除-CSDN博客

针对已有模型,根据数据状态进行贴图处理,例如:机房内电脑告警状态、电脑开关机状态下的不同状态贴图等

示例模型还是以丛林小屋为例:针对该模型中的树干进行贴图处理

原图

贴图后,忽略红色丑树干,只是增强演示效果

找模型的小tip

第一步加载完模型后,查看下模型的结构,可以打印下object的子模型

输出结果:

大概知道这个模型由哪些子模型组成,这个模型没有group的概念,只有简单的mesh组成,根据实际的业务需求,模型名称可能有一定的约束规范,例如id之类。

我们以name为'BTree_BrichTree_0'为例,进行大模型中的对其删除操作;具体代码如下

javascript 复制代码
    // 贴图的方法,设置全局变量screenMaterial, 对其材质赋值
    loadTexture() {
      const img = require('@/assets/img/threeImg/pop-item-red.png'); // 贴图路径
      const textureLoader = new THREE.TextureLoader();
      textureLoader.load(img, texture => {
        this.screenMaterial = new THREE.MeshStandardMaterial({ map: texture });
      });
    },

selectedObject.material = this.screenMaterial; // 敲黑板,划重点

单个模型的情况下,直接对其进行 material 进行赋值即可,亲测有效

javascript 复制代码
const name = 'BTree_BrichTree_0';
const selectedObject = object.getObjectByName(name);
selectedObject.material = this.screenMaterial; // 敲黑板,划重点

模型组的场景,对其进行children遍历,进行材质重新赋值

javascript 复制代码
for (let i = selectedObject.children.length - 1; i >= 0; i--) {
  const child = selectedObject.children[i];
     if (child instanceof THREE.Mesh && child.name.indexOf(name) !== -1 && child.material.map) {
        child.material = this.screenMaterial;
     }
}
相关推荐
To_OC5 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic6 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy6 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志6 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble7 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯8 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜9 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司9 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
kaiking_g9 小时前
vue项目中,静态导入 vs 动态导入 详解
前端·javascript·vue.js
江华森10 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http