【问题标题】:How to update particular part of a model in .dae file using Three.js and Collada Loader如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分
【发布时间】:2019-03-20 18:24:11
【问题描述】:

我在example中使用了three.js提供的一个Elf Girl模型的例子 这是我正在使用的链接ELF GIRL

我想更新这张图片 CE2 image 而不是这个CE image

【问题讨论】:

  • 为什么不在加载DAE 之前更改原始纹理?如果由于某些原因想要保留原始纹理,可以打开DAE 并查找<init_from>ce.jpg</init_from> 行。您可以在此处更改纹理名称,以便 ColladaLoader 加载不同的文件。
  • 我希望它在按钮单击时在运行时替换。

标签: javascript three.js 3d collada


【解决方案1】:

用途:

var yourObject;
modelOrScene.traverse( (obj)=>{
  if(obj.material && obj.material.map)
      console.log(obj.name) //print all object names, and material map image paths..
  if(obj.name == 'NameOfTheObjectWithTheTexture")
      yourObject = obj;
})

在您的模型上查找具有纹理贴图的对象和材质的名称。

一旦您知道哪个对象具有该材质+贴图,您就可以使用加载新纹理

   if(yourObject)
      new THREE.TextureLoader().load( "yourOtherImage.png" ,(tex)=>{
       yourObject.material.map  = tex;  //Replace the objects material once the new material is loaded.
    })

【讨论】:

  • 我收到错误,因为无法读取 (obj.material.map.img.src) 处未定义的属性“src”。
  • 这是我尝试过的,它向我显示了同样的错误。 $("#img_changer").click(function() { scene.traverse((obj) => { if (obj.material && obj.material.map) console.log(obj.name, obj.material[0] .map.img.src) //打印所有对象名称,以及材质贴图图像路径.. /* if (obj.name == 'NameOfTheObjectWithTheTexture") yourObject = obj;*/ }) }); }
  • 对不起.. 更新了我的答案.. 我认为是 .image 而不是 .img
  • 错误存在,但如果我替换 console.log(obj.name,obj.material[0].map.image.src);这不是我认为的正确方式。它只针对第一张图片
  • 我正在尝试向您展示如何使用 .traverse 检查场景中的所有节点...尝试一下: console.log(obj.name) 这将告诉您对象名称。 .
猜你喜欢
  • 2018-02-26
  • 2012-01-07
  • 2014-12-09
  • 2017-04-04
  • 2017-03-27
  • 1970-01-01
  • 2018-06-20
  • 2012-03-26
  • 2017-01-19
相关资源
最近更新 更多