Threejs加载包含贴图信息的obj文件遇到的问题

Threejs加载包含贴图信息obj文件遇到的问题

今天在开发实验室三维重建助手时,遇到了Threejs加载obj文件和png贴图,模型不显示贴图的问题。在此记录修复过程:

项目在之前使用Treejs加载obj模型+png文件都是可以正常展示的,但是在与后台对接了TripoSR算法(一个根据图片生成三维模型的算法,生成结果为obj文件和png贴图)之后,使用Tressjs加载模型发现模型始终无法贴图。
在这里插入图片描述
加载模型代码如下:

loaderModel () {
    const textureLoader = new THREE.TextureLoader()
    textureLoader.load(this.imgUrl, (texture) => {
      texture.colorSpace = THREE.SRGBColorSpace
      const material = new THREE.MeshLambertMaterial({
          map: texture
      })
      const objLoader = new OBJLoader()
      const msg = '模型已加载,正在贴图……'
      objLoader.load(this.objUrl, (loadedMesh) => {
        this.computeScale(loadedMesh)
        this.$message.info(msg)
        loadedMesh.traverse((child) => {
           if (child.isMesh) {
              child.material = material
           }
        })
        options.meshScale = loadedMesh.scale.x
        loadedMesh.position.set(options.meshPosX, options.meshPosY, options.meshPosZ)
        loadedMesh.scale.set(options.meshScale, options.meshScale, options.meshScale)
        loadedMesh.rotation.set(options.meshRateX, options.meshRateY, options.meshRateZ)
        this.objs['mesh'] = loadedMesh
        this.scene.add(loadedMesh)
        this.animate()
      }, this.onProgress)
      this.loader = objLoader
    })
  }
},

网上搜索大多数给出的意见就是:贴图和模型是异步从后台异步加载的,检查了一下自己的代码发现并没有这个问题

苦思无果,最后尝试将算法生成的模型导入到网上的在线3D模型编辑器看看是不是生成3D模型不完整的原因,意想不到的结果出现了在我将obj文件上传到在线编辑器后还没有上传贴图这个时间,发现在线编辑器中展示的模型居然是带有贴图的

于是回到开发项目中,选择对TripoSR算法生成的模型(毕竟就它特殊)只加载obj文件不进行贴图,发现可以解决这个问题,修复bug后可以正常展示
在这里插入图片描述
另外一个小插曲,在使用平台时,由于在展示模型时增加了一个dat.gui控制器用于相机、环境、模型参数的控制,发现关闭modal时,控制器不会关闭,在第二次打开时它有会重新创建一个控制器,导致重复创建。

检查了一下代码发现在beforeDestroy方法中已经进行元素销毁了

beforeDestroy () {
	if (this.gui) {
		this.gui.domElement.remove()
    }
}

但是modal关闭后,它依然存在,继续检查发现使用了路由配置了keepAlive: true,好吧,那就只能另寻他法了
这里我是通过监听modal的关闭与打开来判断是否销毁dat.gui控制器,可以解决重复创建的问题

watch: {
   vis: {
     handler (newv, oldv) => {
       if (!newv && this.gui) {
      		this.gui.domElement.remove()
       }
     }
   }
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值