我当前正在加载 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/