• 版块
  • 最新
  • 标签
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

Orillusion

2

在线

550

用户

171

主题

456

帖子

加载的模型如何更换材质纹理

已定时 已固定 已锁定 已移动 中文社区
中文社区
5 帖子 2 发布者 112 浏览
    • 从旧到新
    • 从新到旧
    • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • L 离线
    L 离线
    lawa0592
    写于 最后由 编辑
    #1

    我是这么写的,没有效果

    let model = await Engine3D.res.loadGltf('xx.gltf')
    let mr = model.addComponent(MeshRenderer);
    let texture = await Engine3D.res.loadTexture('xxx.jpg');
    let mat = new LitMaterial();
    mat.baseMap = texture;
    mr.material = mat;
    
    1 条回复 最后回复
    0
  • shuangliuS 离线
    shuangliuS 离线
    shuangliu
    写于 最后由 shuangliu 编辑
    #2

    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
    
    L 1 条回复 最后回复
    0
  • L 离线
    L 离线
    lawa0592
    写于 最后由 编辑
    #3

    原来如此,已解决,谢谢

    1 条回复 最后回复
    0
  • L 离线
    L 离线
    lawa0592
    在 中回复了 shuangliu 最后由 编辑
    #4

    @shuangliu 如果是直接更换节点的材质球呢,我将材质替换成新的材质,但是没有被渲染出来

    mr.material = new LitMaterial();
    
    1 条回复 最后回复
    0
  • shuangliuS 离线
    shuangliuS 离线
    shuangliu
    写于 最后由 编辑
    #5

    嗯 这个是一个已知bug
    https://github.com/Orillusion/orillusion/issues/177
    稍后版本会解决这个问题

    1 条回复 最后回复
    0

Copyright © 2023 Orillusion | Contact US

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。