首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于ARView没有加载本地图像,标记和雷达在AR.ImageResource中不可见

由于ARView没有加载本地图像,标记和雷达在AR.ImageResource中不可见
EN

Stack Overflow用户
提问于 2016-11-17 12:43:48
回答 1查看 173关注 0票数 1

在我的PhoneGap应用程序中,我使用的是Wikitude插件(5.1.1),所有的Wikitude特性都运行良好。现在,我正在更新我的插件到最新的5.3.0版本,但我们正面临一些问题,在IOS设备上的Wikitude插件功能。问题是:

当我在应用程序中加载ARView时,所有标记和雷达都会正确显示,但是当我使用AR.context.destroyAll()从ARView中销毁所有对象时,当我再次尝试在ARView上绘制雷达和制作者时,这些对象在ARView上是不可见的。我的应用程序有一个功能,我需要清除ARView中的所有标记,并使用一些过滤器重新绘制标记。

现在我发现了为什么标记和雷达在摧毁后是看不见的。

原因是" AR.ImageResource“在销毁后没有正确地加载标记和雷达。当我为AR.ImageResource添加onLoaded和onError回调时。当我们第一次加载AR世界时,我会收到对"onLoadded“回调的调用。但是当我在销毁后加载ImageResouce时,我收到了对"onError“回调的调用,错误显示它在错误的路径上找到了图像。

我使用loadARchitectWorld的AR体验URL为: var arExperienceUrl =“www/main_home_ar_view_cre.html”;

用于雷达图像资源的图像路径: www > img > wikitude_img > radar_bg.png

加载AR.ImageResource的代码:

代码语言:javascript
复制
AR.radar.background = new AR.ImageResource("img/wikitude_img/radar_bg.png", {
onLoaded : function successFn(loadedURL) {
           /* Respond to successful world loading if you need to */
            alert("onLoaded");                   
    },
onError : function errorFn(error) 
{
            alert("onError " + error + " & " +  error.message);
    }});

当我第一次加载AR世界时,上面的代码工作得很好。但是,在从"/www/main_home_ar_view_screen.html/img/wikitude_img/radar_bg.png",中销毁对象之后,AR.ImageResource在此路径上查找图像,因为在错误的路径上找到图像,因此没有加载图像(参见附加图像)。

我也发现这些东西:

  • 同样的代码在Android平台上运行良好。
  • 如果我在AR.ImageResource中使用图像URL(Remote Image),那么iOS also.That上的一切都很好,这意味着在ARView上销毁后所有标记和雷达都会正确显示,但是当我使用带有AR.ImageResource的本地图像路径时,标记和雷达就不会在销毁后显示(当我用本地图像路径加载AR世界时,会正确地显示标记和雷达)。

请建议我如何用本地图像路径来解决AR.ImageResouce问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-06 09:15:34

要解决此问题,只需将以下代码段粘贴到主架构师.js文件的顶部

代码语言:javascript
复制
AR.__resourceUrl = function(url) 
{
   if (/^([a-z\d.-]+:)?\/\//i.test(url)) 
   {
      // URL contains protocol and can be considered absolute
      return url;
   }
   // get protocol
   var protocol = document.baseURI.substring(0,
   document.baseURI.indexOf('/') + 2);
   var uri = document.baseURI.substring(document.baseURI.indexOf('/') +    2);
    // remove fragment identifier
    if ( uri.indexOf('#') > 0 && uri.length > uri.indexOf('#') +1 ) {
        uri = uri.substring(0, uri.lastIndexOf('#'));
        // in case there was a '/' after the fragment identifier, we need to add it back again
        if ( uri[uri.length - 1] !== '/' ) {
            uri += '/';
        }
    }
    // remove trailing file (edge case, this is just a domain e.g.
    // www.google.com)
    uri = uri.substring(0, uri.lastIndexOf('/') + 1);
    var baseUrl = protocol + uri;
    if (baseUrl[baseUrl.length - 1] !== '/')
    baseUrl += '/';
    if (url[0] === '/') {
    // url references root
    baseUrl = baseUrl.substring(0, baseUrl.indexOf('/', baseUrl
 .indexOf('//') + 2));
    }
    var resourceURL = baseUrl + url;
    return resourceURL;
};

当我从Wikitude论坛获得这个解决方案时

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40655226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档