加载的模型如何更换材质纹理
-
loadGltf
返回的是一个模型的root节点,内部已经将模型的所有子节点添加了MeshRenderer
组件,每个子节点都拥有自己的 geometry 和 material,想要更换贴图的话,需要对子节点自己的MeshRenderer
进行处理, 比如,更换所有子节点的贴图:let model = await Engine3D.res.loadGltf('xx.gltf') let texture = await Engine3D.res.loadTexture('xxx.jpg'); // 遍历子节点 model.forChild(node=>{ // 获得节点渲染器组件 let mr = node.getComponent(MeshRenderer); if(mr) mr.material.baseMap = texture // 更换贴图 })
如果只想对某一个子节点进行更换贴图,一种方法是在
forChild
内部判断 node.name 再进行操作model.forChild(node=>{ if(node.name === 'xxx'){ .... } })
也可以通过
getChildByName
直接找到对应的子节点let model = await Engine3D.res.loadGltf('xx.gltf') let texture = await Engine3D.res.loadTexture('xxx.jpg'); let target = model.getChildByName('xxxx') // 子节点名称 let mr = target.getComponent(MeshRenderer) mr.material.baseMap = texture
-
嗯 这个是一个已知bug
https://github.com/Orillusion/orillusion/issues/177
稍后版本会解决这个问题