收藏
回答

XR-FRAME 如何动态创建 Geometry 和 Material 并设置给 Mesh?

目前 Geometry 是通过 Scene.createGeometry 动态创建的,之后,尝试通过以下方法设置,均无效:

尝试动态设置:

const mesh = scene.getElementById("mesh").getComponent(xrFrameSystem.Mesh);
mesh.setDataOne("geometry", geometry); // 无效
mesh.geometry = geometry; // readonly


尝试动态创建节点并绑定到 shadow 下:

const node = scene.createElement(xrFrameSystem.XRMesh);
node.addComponent(xrFrameSystem.Mesh, { geometry, material });
const shadow = scene.getElementById('shadow');
shadow.addChild(node);


通过 `xrFrameSystem.registerGeometry` 注册后使用没有问题。

最后一次编辑于  2023-03-09
回答关注问题邀请回答
收藏

3 个回答

  • 瞬光寂暗
    瞬光寂暗
    2023-03-09

    这么写是可以的,看看是不是你geometry创建错了:

    const xrFrameSystem = wx.getXrFrameSystem();
    const mesh = xrScene.getElementById("cube").getComponent(xrFrameSystem.Mesh);
    const geometry = xrScene.assets.getAsset('geometry', 'sphere');
    mesh.setDataOne("geometry", geometry);
    
    2023-03-09
    有用 1
    回复 1
  • 雄关漫道
    雄关漫道
    2023-03-23

    @腾飞,我用你的方法始终无法动态加载一个物体啊?最简单的cube都不行,代码没有错,就是不显示。能否告知你是如何解决的?有窍门吗?

          const xrFrameSystem = wx.getXrFrameSystem()

          const node = _this.scene.createElement(xrFrameSystem.XRNode);

          node.addComponent(xrFrameSystem.Mesh, { geometry: 'cube'});


    2023-03-23
    有用
    回复 1
    • 跑偏
      跑偏
      2023-05-04
      请问问题解决了吗,遇到同样的问题,最简单的添加cube都不显示
                const node = scene.createElement(xrFrameSystem.XRNode, {geometry:'cube'});
                const shadow = scene.getElementById('shadow-root');
                shadow.addChild(node);
      2023-05-04
      回复
  • 腾飞
    腾飞
    2023-03-09
    const node = scene.createElement(xrFrameSystem.XRNode); node.addComponent(xrFrameSystem.Mesh, { geometry, material });
    


    将 XRMesh 替换为 XRNode 就可以了,记录一下。

    2023-03-09
    有用
    回复
登录 后发表内容