【问题标题】:ArCore :: anchor - To appear in front of camera always using ArSession_acquireNewAnchor APIArCore :: 锚点 - 始终使用 ArSession_acquireNewAnchor API 出现在镜头前
【发布时间】:2019-05-28 21:34:04
【问题描述】:

应用信息:

我正在开发一个基于 ArCore (NDK) 的 Android 应用程序,以在真实的相机源上增强某些对象(从搅拌器工具生成)。现在我可以将对象绘制为 anchors,它会随着相机位置的变化而放大/缩小。

我正在使用 ArSession_acquireNewAnchor API 来托管距离相机大约几英寸的锚点,如下所示。

ArPose_create(ar_session_, nullptr, &camera_pose);
ArPose_getPoseRaw(ar_session_, camera_pose, raw_camera_pose);
ArAnchor *anchor = nullptr;
if (ArSession_acquireNewAnchor(ar_session_, raw_camera_pose, &anchor)!=AR_SUCCESS) {          
    LOGE("Anchor is not successfully acquired");
    } 

启动应用程序并将设备保持在同一方向后,可以看到上面的锚点。

问题陈述:

当摄像头位置/方向发生变化时,这些锚点不会按预期显示。请帮助 - PFB 问题的图示。

我的观察:

  1. 当我根据相机姿势获取锚点时,我假设锚点的方向和姿势属性仅基于相机姿势,即当相机移动(平移)时,锚点也会相应移动 - 我的理解是否正确?

    ArSession_acquireNewAnchor(ar_session_, raw_camera_pose, &anchor)

  2. 使用 hitResult 基于锚点获取后,一切正常,即当设备在适当位置(触摸坐标)从一个方向更改为另一个方向时出现锚对象 - 但是我的用例不依赖于触摸输入事件。我需要在给定场景的预定义位置坐标上实现相同的效果。

    if(ArHitResult_acquireNewAnchor(ar_session_, ar_hit_result, &anchor)!= AR_SUCCESS) { LOGE("不成功"); 返回; }

请注意,这是使用 ArCore NDK 开发的。

【问题讨论】:

    标签: android augmented-reality arcore projection-matrix


    【解决方案1】:

    我可以通过调整锚对象的位姿值来实现。

    相机原始姿势由 7 个参数组成,如下所示。

      raw_pose = {0, 0, 0, 1.0, driftx, 0,-5.0};
    

    锚点获取API-

      ArSession_acquireNewAnchor(ar_session_, raw_pose, &anchor);
    

    在这里,第 7 个索引值将锚点放置在距离相机 5 个单位的位置。 第 5 个索引值(driftx)指示 ArCore 为给定的锚点在 x 中进行必要的(driftx 单位)转换。 当设备从一侧转向另一侧时,属性driftx 用于跟踪相机位姿的漂移(仅相机位姿的第5 个索引值)。

    计算driftx 的方法没有得到准确的解,但接近于预期的结果。正在进一步研究以提高driftx的准确性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2018-10-30
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多