ArCore ::锚点-始终使用ArSession_acquireNewAnchor API出现在镜头前

时间:2019-01-02 07:49:16

标签: android augmented-reality arcore projection-matrix

应用信息:

我正在开发基于 ArCore(NDK)的Android应用程序,以在真实的相机供稿上扩展某些对象(从Blender工具生成)。现在,我可以将对象绘制为,它可以根据相机位置的变化来放大/缩小。

我正在使用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(“未成功”);     返回; }

Problem-statement

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

1 个答案:

答案 0 :(得分:0)

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

相机原始姿势由以下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用于跟踪摄像头姿势的漂移(仅摄像头姿势的第5个索引值)。

计算driftx的方法不能产生准确的解,但是可以满足预期的结果。正在进一步研究以提高driftx的准确性。