因此,我从3d模型应用程序中导出了Collada(dae)以创建包装。
我已经成功地在场景中导入了该模型
var loader = new THREE.ColladaLoader();
loader.load("model.dae", collada => {
this.scene.add(collada.dae);
});
这有效。动画也可以。
但是,此dae文件具有对外部纹理的一些引用。我想以编程方式替换其中一些。
导出的dea使用ShaderMaterial
元素,我不知道对其应用新的纹理。我所做的一切都会使其变黑或什么都不做。
我尝试过的事情
我知道要替换的蜜蜂图像纹理的名称。名称为TextureResource129.png
。
那我该怎么办
dea
中的所有节点/子节点。material object
和is a mesh
代码:
var loader = new THREE.TextureLoader();
loader.load("/assets/images/texture2/TextureResource129.png", texture => {
this.dae.traverse(node => {
if (node.material && node.isMesh) {
if (
node.material.uniforms.EnvDiff0 &&
node.material.uniforms.EnvDiff0.value.image.currentSrc.indexOf("TextureResource129.png") > -1 ||
node.material.uniforms.paperBump1 &&
node.material.uniforms.paperBump1.value.image.currentSrc.indexOf("TextureResource129.png") > -1 ||
node.material.uniforms.matDiff1 &&
node.material.uniforms.matDiff1.value.image.currentSrc.indexOf("TextureResource129.png") > -1 ||
node.material.uniforms.matDiff2 &&
node.material.uniforms.matDiff2.value.image.currentSrc.indexOf("TextureResource129.png") > -1
) {
var material = node.material.clone();
if(material.uniforms.EnvDiff0) material.uniforms.EnvDiff0.image = texture;
if(material.uniforms.paperBump1) material.uniforms.paperBump1.image = texture;
if(material.uniforms.matDiff1) material.uniforms.matDiff1.image = texture;
if(material.uniforms.matDiff2) material.uniforms.matDiff2.image = texture;
node.material = material;
}
}
});
});
这会使对象变黑。因此I tried only cloning the material and attaching it again to the same node
,无需更改。
但是即使那样,它也会再次变黑:
var loader = new THREE.TextureLoader();
loader.load("/assets/images/texture2/TextureResource129.png", texture => {
this.dae.traverse(node => {
if (node.material && node.isMesh) {
if (
node.material.uniforms.EnvDiff0 &&
node.material.uniforms.EnvDiff0.value.image.currentSrc.indexOf("TextureResource129.png") > -1 ||
node.material.uniforms.paperBump1 &&
node.material.uniforms.paperBump1.value.image.currentSrc.indexOf("TextureResource129.png") > -1 ||
node.material.uniforms.matDiff1 &&
node.material.uniforms.matDiff1.value.image.currentSrc.indexOf("TextureResource129.png") > -1 ||
node.material.uniforms.matDiff2 &&
node.material.uniforms.matDiff2.value.image.currentSrc.indexOf("TextureResource129.png") > -1
) {
var material = node.material.clone();
node.material = material;
}
}
});
});
所以问题是:
如何在场景中以编程方式更改collada(.dea)文件的纹理?