如何检测AR.js

时间:2017-06-28 10:02:43

标签: three.js aframe artoolkit ar.js

我试图在使用a-frame时检测ar.js中找到/丢失标记的时间。

根据我在source code中看到的,当找到标记时,“getMarker'应该触发事件,而且artoolkit似乎派遣了一个markerFound事件。

我试图在<a-scene><a-marker>上听取这些事件,但似乎我错了,或者我需要深入了解{{1} }或arController个对象。

当我记录场景或标记时,我只获得对属性的引用,这些属性似乎没有附加上述对象。(如arToolkitmarker.arController

有没有人试过这个并且有任何提示如何做到这一点?

2 个答案:

答案 0 :(得分:8)

PR303会在找到并丢失标记时引入事件

  • markerFound
  • markerLost

只需添加一个事件监听器即可使用它们:

anchorRef.addEventListener("markerFound", (e)=>{ // your code here}

使用这样的简单设置:

<a-marker id="anchor">
  <a-entity>
</a-marker>

示例here。 请注意,从第18页开始,您需要使用dev分支来使用上述内容。

<小时/> ORIGINAL ANWSER - 如果您想手动执行
通过检查标记在需要时是否可见(其他事件或勾选)来检测是否可以找到标记:if(document.querySelector("a-marker").object3D.visible == true)

例如:

init: function() {
   this.marker = document.querySelector("a-marker")
   this.markerVisible = false
},
tick: function() {
   if (!this.marker) return
   if (this.marker.object3D.visible) {
      if (!this.markerVisible) {
         // marker detected
         this.markerVisible = true
      }
   } else {
      if (this.markerVisbile) {
         // lost sight of the marker
         this.markerVisible = false
      }
   }
}

<小时/> 正如adrian li所说,它不适用于a-marker-camera,仅适用于a-markers

答案 1 :(得分:0)

我进行了一次肮脏的内部调查,请记住,我提供的内容可能不够用,因为每次找到标记时都会调用该事件,但不幸的是,我找不到可以加入的事件标记丢失。

const arController = document.querySelector("a-scene").systems.arjs._arSession.arContext.arController;

arController.addEventListener("getMarker", (evt) => {
    const markerType = evt.data.type;
    const patternType = 0;

    //console.log("onMarkerFound!!");

    if (markerType == patternType) {
        //console.log("onMarkerFound out pattern!!");

        //Do stuff...
    }
});