javascript - Three.js - 多次使用时更改特定 GLTF 的材质
问题描述
我目前正在加载一个 GLTF 资产并在场景中多次使用它。
我想更改作为 GLTF 的目标对象内所有网格的材质颜色。
traverseMaterials(object, (material) => {
material.color.set(
object.info.model.color
);
});
这是可行的,但是它会更改所有其他 GLTF 对象。
我的目标是更改目标对象及其子网格材料的颜色。(并非所有这些都适用于所有使用过的 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);
});
}
解决方案
材料=克隆材料;
只是这样做不会改变node.material
. 这意味着您实际上必须将克隆的材料分配给node.material
.
推荐阅读
- mysql - Kubernetes集群中部署的应用如何实现线程安全?
- firebase - 使用 Firebase 将验证码发送到电子邮件以进行两步验证
- c# - CodecQuery.FindAllAsync 在查询没有子类型的音频编解码器时通过 try/catch 崩溃
- node.js - NextJS 和 KeystoneJS 网站无法获取 GraphQL 数据(错误:没有名为“public”的可执行架构可用)
- tensorflow - BERT 模型微调和迁移到 TF2
- python - 运行长度解压python
- java - 语法错误,插入“Dimensions”以完成 TypeArgument
- anaconda - Anaconda Navigator:有没有办法查看控制台?
- python - Python:类内的函数范围
- apache - 使用 .htaccess 重定向 404 而不重定向尾部斜杠