ThreeJs模拟工厂生产过程七

简介: 这篇文章详细介绍了如何在Three.js中为工厂车间的货架动态生成并放置货物,通过循环逻辑和贴图应用使货架上的物品更加逼真,增强了场景的真实感。

上个章节给车间添加了线边仓,也就是货架,但是货架上是空的,这节给货架添加货物,货架的结构是循环出来的,那么货物也就可以循环生成出来,

首先我们可以封装一个方法用来生成货物,必要的参数是货物的位置也就是x,y,z,还有一个货物名称,为了货物看起来更真实,我们给他添加一个贴图,不是再像之前那样添加纯色了,图片是这样的

代码如下:新建一个3*3*2的几何体,添加贴图加载器,在贴图加载器中加载贴图,加载后创建贴图材质,然后通过几何体和材质创建一个网格模型并添加到场景中,

 //新增料箱
    addCube(x,y,z,name){
      let geometry = new THREE.BoxGeometry(3,3,2)
      const textureLoader = new THREE.TextureLoader();
      textureLoader.load("/static/images/box.png", (texture) => {
        const material = new THREE.MeshBasicMaterial({map: texture});
        let mesh = new THREE.Mesh(geometry, material);
        mesh.position.set(x,y,z);
        mesh.name = name
        this.scene.add(mesh);
      });
    },

下面就需要设计如何循环生成货物并放置到货架的储位上了,我们在创建货架的时候创建了shiftList集合,里面放的是货架,那么我们只需要先循环货架,在循环货架中循环货架的层和列,在三层循环的循环体内调用创建货物的方法就好了,

代码如下:

initCube(){
      for(let q=0; q<this.shelfList.length;q++){
        for(let i=0;i<this.layerNum;i++){
          for(let j=0;j<this.columnNum;j++){
            let shorageName = this.shelfList[q].shelfName + "_" + (i + 1) + "层_" + (j + 1) + "列"
            let x = this.shelfList[q].positionX;
            let y = this.shelfList[q].positionY + 2 + j * (this.plane.planeLength / 3)
            let z = this.shelfList[q].positionZ + i * (this.holder.holderHeight + this.plane.planeHeight)-9
            this.addCube(x - 2, y, z, "box " + "_" + shorageName + "_1")
          }
        }
      }
    },

不过这里可以看到货架的深度有点深,一个货物不足以占满整层,这里就再给他添加一个货物,放在同一列。先把原始的料箱往内偏移一点,在外层再创建一个料箱就好了,代码修改如下:

initCube(){
      for(let q=0; q<this.shelfList.length;q++){
        for(let i=0;i<this.layerNum;i++){
          for(let j=0;j<this.columnNum;j++){
            let shorageName = this.shelfList[q].shelfName + "_" + (i + 1) + "层_" + (j + 1) + "列"
            let x = this.shelfList[q].positionX;
            let y = this.shelfList[q].positionY + 2 + j * (this.plane.planeLength / 3)
            let z = this.shelfList[q].positionZ + i * (this.holder.holderHeight + this.plane.planeHeight)-9
            this.addCube(x - 2, y, z, "box " + "_" + shorageName + "_1")
            this.addCube(x + 2, y, z, "box " + "_" + shorageName + "_2")
          }
        }
      }
    },

效果:

现在就好很多了,不过之前产线上的货物还是纯色的红色正方体,我们可以顺便利用这个贴图也给他加上,

代码如下:

 initBox(x,y,z){
      const textureLoader = new THREE.TextureLoader();
      for (let i = 0; i < 22; i++) {
        textureLoader.load("/static/images/box.png", (texture) => {
          let geometry = new THREE.BoxGeometry(3,3,3);//创建一个几何体
          const material = new THREE.MeshBasicMaterial({map: texture});
          let mesh = new THREE.Mesh(geometry, material);
          mesh.position.set(x+i*10,y,z+2);
          this.scene.add(mesh);
          this.boxList.push(mesh)
        });
      }
      for (let i = 0; i < 22; i++) {
        this.scene.add(this.boxList[i]);//添加到场景中
      }
    },

现在的整个车间效果如下:

相关文章
|
编解码 IDE 算法
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
598 0
|
6天前
ThreeJs模拟工厂生产过程六
这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第六部分,重点是创建和实现车间内线边仓货架的三维模型及其布局。
11 1
ThreeJs模拟工厂生产过程六
|
6天前
ThreeJs模拟工厂生产过程二
这篇文章详细介绍了如何使用Three.js创建一个模拟工厂车间的3D模型,包括绘制地面和墙面的具体步骤,并特别关注于如何创建带有门的墙面以增加车间的真实性。
16 5
|
6天前
ThreeJs模拟工厂生产过程一
这篇文章详细介绍了如何使用Three.js模拟工厂生产过程的第一部分,包括创建传送带、生产设备和产品的模型,并实现产品沿传送带移动的动画效果。
15 5
|
6天前
|
UED
ThreeJs模拟工厂生产过程三
这篇文章介绍了在Three.js中通过使用mergeGeometries技术来合并大量车间模型,以减少浏览器渲染负担,提高性能,并提供了实现模型合并的具体方法和步骤。
15 5
|
6天前
ThreeJs模拟工厂生产过程四
这篇文章详细说明了如何在Three.js中为模拟的工厂产线添加警戒线,以增强产线模型的真实感和安全性表现,通过使用`PlaneGeometry`来创建并定位这些警戒线。
10 1
|
6天前
|
程序员 图形学
ThreeJs模拟工厂生产过程五
这篇文章详细介绍了如何在Three.js中模拟工业生产过程的第五部分,重点在于添加并实现车间内人物的动态行走动画,使人能够在车间内来回移动,增加了场景的真实感。
16 0
|
6天前
|
JavaScript
ThreeJs模拟工厂生产过程八
这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第八部分,重点是优化场景中的模型,包括合并货架上的料箱以减少渲染负担,并替换设备模型以增强场景的真实性和互动性。
21 0
|
4月前
经验大分享:QML动态标注线
经验大分享:QML动态标注线
22 0
|
5月前
|
设计模式 安全 Java
老系统重构系列--如何用一套流程接入所有业务线
**摘要:** 本文介绍了老系统改造的过程,作者提出,ToB业务的挑战在于需要支持多种差异化的业务需求,而模板模式在处理这种需求时可能会导致继承关系复杂和粒度过粗。为了解决这些问题,文章提出了以下步骤: 1. **梳理流程差异点**:识别不同业务流程的差异,以便确定扩展点。 2. **领域模型梳理**:区分核心域和支撑域,确保核心域的稳定性。 3. **二次抽象隔离层**:创建隔离层,避免核心域因新业务接入而变得不稳定。 4. **基于SPI的扩展体系建设**:选择了COLA-SPI实现扩展点,允许业务域定义接口并实现差异化的流程逻辑。
108 0