javascript - Three.js - 多次使用时更改特定 GLTF 的 Material

标签 javascript three.js

我当前正在加载 GLTF 资源并在场景中多次使用它。

我想更改 GLTF 目标对象内所有网格物体的 Material 颜色。

traverseMaterials(object, (material) => {
    material.color.set(
        object.info.model.color
    );
});

这是有效的,但是它改变了所有其他 GLTF 对象。

我的目标是更改目标对象及其子网格 Material 的颜色。 (并非所有都适用于所有使用过的 GLTF)

我尝试过,但没有任何反应。

traverseMaterials(object, (material) => {
    let clonedMaterial = material.clone();
    material = clonedMaterial;
    material.color.set(
        object.info.model.color
    );
});

这里是traverseMaterials函数供引用

function traverseMaterials (object, callback) {
     object.traverse((node) => {
     if (!node.isMesh) return;
     const materials = Array.isArray(node.material)
     ? node.material
     : [node.material];
     materials.forEach(callback);
  });

}

最佳答案

material = clonedMaterial;

仅执行此操作不会更改 node.material 的引用。这意味着您实际上必须将克隆 Material 分配给 node.material

关于javascript - Three.js - 多次使用时更改特定 GLTF 的 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895847/

相关文章:

three.js - glClipPlane - webGL 中有等效的吗?

javascript - 编辑布局以在元素之间使用垂直规则。

javascript - 旋转轮或360度旋转轮

javascript - 使用 javascript 和 c# 打印 pos 收据

javascript - 获取相机当前的旋转 Angular

javascript - 当您的程序同时加载其他媒体时,有没有办法避免 javascript 音频打嗝?

javascript - 性能 - Date.now() 与 Date.getTime()

javascript - 如何将span id传递给rails Controller ?

json - 我可以将带有动画的模型从 MAX 导出到 .json 吗?

三.js/GLSL : WebGL shader to color fragments based on world space position