【问题标题】:ARKit and Vuforia - marker recognitionARKit 和 Vuforia - 标记识别
【发布时间】:2017-10-16 00:33:31
【问题描述】:

我正在开发一个 iOS 应用程序,我需要识别一个标记(很可能是 QR 码)并使用 ARKit 在其上放置一些 3D 内容。

我在考虑 Vuforia 和 ARKit 的组合。

是否可以仅使用 Vuforia 识别标记并获取其位置,然后将这些数据“传递”给 ARKit?

  • 我需要识别标记才能选择相应的 3D 内容。
  • 我只需要获取标记的位置,以便在那里放置 3D 内容,然后我想使用 ARKit 进行跟踪。

有可能吗?
是否有另一种可以与 ARKit 一起使用的标记识别解决方案?

【问题讨论】:

    标签: c# ios unity3d vuforia arkit


    【解决方案1】:

    第一季度: 您可以处理标记的识别(在 Vuforia 中称为 Image Target) 创建脚本:

    public class CustomTrackableEventHandler : MonoBehaviour,
                                               ITrackableEventHandler
    {
        ...
    
        public void OnTrackableStateChanged(
                                        TrackableBehaviour.Status previousStatus,
                                        TrackableBehaviour.Status newStatus)
        {
            if (newStatus == TrackableBehaviour.Status.DETECTED ||
                newStatus == TrackableBehaviour.Status.TRACKED ||
                newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
            {
                OnTrackingFound(); 
                // **** Your own logic here ****
            }
            else
            {
                OnTrackingLost();
            }
        }
    }
    

    然后你可以用这个脚本替换 DefaultTrackableEventHandler。

    Q2:我只需要获取标记的位置,以便在那里放置 3D 内容,然后我想使用 ARKit 进行跟踪。

    您可以添加一个空游戏对象作为标记 (ImageTarget) 的子对象,层次结构为:

    YourMarker(ImageTarget)
         |__EmptyPlaceHolder
    

    识别标记后,您可以通过编程方式获取其位置:

    var placeHolder = GameObject.Find("EmptyPlaceHolder");
    if(placeHolder != null){
        Debug.Log(placeHolder.transform.position); // all the location, localPosition, quaternion etc will be available to you
    
    }
    

    【讨论】:

    • 上面的UI从何而来?我在 Target Manager 或 Xcode 中没有看到类似的东西。
    • 将一个图像目标预制件拖到场景中,你就会看到它。
    • 非常感谢!!!这似乎是一个完美的解决方案,但由于某种原因,它对我不起作用。这是我创建的一个简短示例代码,所以如果我检测到一个标记,我想显示一个带有按钮的简单 UI 画布。 csharppad.com/gist/82e2573f674f1d42b413d3fb8b0b9b60 我禁用了 DefaultTrackableEventHandler,并添加了 Debug.Log() 进行测试,但我在控制台中没有看到任何消息(所以 OnTrackingFound() 从未到达),但我仍然看到对象,以图像预制为父对象当标记被识别时!奇怪我在哪里弄错了?我使用 Unity 2017.2.0f3
    • 你能在其他地方看到Debug.log吗,例如开始() ?您是否隐藏了日志/错误面板?从代码中,如果您看到切换的 UI,则表明 OnTrackingfound() 已被触发。
    • @Rumata 我也在寻找类似的解决方案。你能破解这个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多