如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分
Posted
技术标签:
【中文标题】如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分【英文标题】:How to update particular part of a model in .dae file using Three.js and Collada Loader 【发布时间】: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
加载不同的文件。
我希望它在按钮单击时在运行时替换。
【参考方案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) 这将告诉您对象名称。 .以上是关于如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分
如何在 Three.js 中用 ShaderMaterial 替换 Collada 导入的纹理?