一个gltf模型一般是由多个子模型组合而来的,loadGltf 的本质是遍历模型中所有子节点,挨个添加 meshrenderer 分别进行渲染,最终返回的只是模型的一个逻辑根节点,这个 object 本身是没有内容的,它的 children 才是具体的渲染节点,给 root 设置 material 是不会更改内部子节点显示内容的。
一般我们可以通过forChild遍历模型的所有子对象来设置对应的 meshrenderer 显示,e.g.
// 加载模型,返回一个 root 节点
let asrolite = await Engine3D.res.loadGltf(...)
// 遍历所有子节点
asrolite.forChild(node=>{
// 获取子节点的渲染组件
let mr = node.getComponent(MeshRenderer)
if(mr){
// 如果是渲染节点,再设置对应的 material
mr.material.emissiveMap = …
mr.material.emissiveColor = …
…
}
})