收藏
回答

为什么xr-gltf加载不出来glt文件?

<xr-assets bind:progress="handleAssetsProgressbind:loaded="handleAssetsLoaded">

    <xr-asset-load type="gltfasset-id="gltf-itemsrc="{{url}}/scene.glb" />

    <xr-asset-load type="gltfasset-id="anchorsrc="https://mmbizwxaminiprogram-1258344707.cos.ap-guangzhou.myqcloud.com/xr-frame/demo/ar-plane-marker.glb" />

    <xr-asset-material asset-id="standard-mateffect="standard" />

  </xr-assets>

代码中为两个glb加载,其中官方文档给出的内容可以顺利加载到本地:

我自己的云端文件加载内容如下:

请问为什么加载不出来glb文件

回答关注问题邀请回答
收藏

2 个回答

  • Roam
    Roam
    2023-02-15

    感觉这里很大概率是 url 设置的时机问题,xr-asset-load 不允许动态改动字段。

    如果需要根据 url 动态加载,建议使用脚本

    // gltf加载参考脚本
    async loadGLTF(gltfList) {
        const scene = this.scene
        const gltfModel = await Promise.all(gltfList.map(gltfItem => scene.assets.loadAsset({
          type: 'gltf',
          assetId: 'gltf-' + gltfItem.id,
          src: gltfItem.url,
        })))
    
        console.log('glTF asset loaded')
        this.setData({ gltfLoaded: true })
    }
    
    2023-02-15
    有用
    回复 7
    • 慕雅
      慕雅
      2023-02-15
      你好,感谢回答,但是没太看懂,请问这个脚本需要在哪个节点执行?
      2023-02-15
      回复
    • 慕雅
      慕雅
      2023-02-15
      你好,我这个url其实是一个固定的阿里云oss,不知道跟这个是否有关系,加载出来的glb在本地的文件后缀是.unkown,而官方案例当中的glb文件就可以正常加载出来
      2023-02-15
      回复
    • Roam
      Roam
      2023-02-15回复慕雅
      必须带后缀,不然解析不知道这个二进制文件的类型。
      2023-02-15
      回复
    • Roam
      Roam
      2023-02-15回复慕雅
      这个算是伪代码,需要你根据自身逻辑去调整脚本逻辑,你可以在场景ready的时候执行这部分逻辑 
      <xr-scene bind:ready="handleReady">
      2023-02-15
      回复
    • 慕雅
      慕雅
      2023-02-15回复Roam
      好的,感谢,我这就试一下
      2023-02-15
      回复
    查看更多(2)
  • Robin(洛濱)
    Robin(洛濱)
    04-26
    执行后,能显示 'glTF asset loaded'
    

    但在场景中没有将模型显示出来,是不是少了什么指令


    async loadGLTF(gltfList) {

    console.log(mSceen);

    const gltfModel = await Promise.all(gltfList.map(gltfItem => mSceen.assets.loadAsset({

    type: 'gltf',

    assetId: 'gltf-' + gltfItem.id,

    src: gltfItem.url,

    })))


    console.log('glTF asset loaded')

    vThis.setData({ gltfLoaded: true })

    },


    04-26
    有用
    回复
登录 后发表内容