ArCore :: anchor - 始终使用ArSession_acquireNewAnchor API出现在摄像头前

问题描述 投票:0回答:1

App-info:

我正在开发一个基于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");
    } 

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

Problem statement:

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

My Observations:

  1. 当我基于相机姿势获取锚时,我假设锚的方向和姿势属性将仅基于相机姿势,即当相机移动(平移)时,锚也相应地移动 - 我的理解是否正确? ArSession_acquireNewAnchor(ar_session_,raw_camera_pose和anchor)
  2. 在使用基于hitResult的锚点获取时,一切正常,即当设备在适当的位置从一个方向改变到另一个方向时出现锚点对象(触摸坐标) - 但是我的用例不依赖于触摸输入事件。我需要在给定场景的预定义位置坐标处实现相同的效果。 if(ArHitResult_acquireNewAnchor(ar_session_,ar_hit_result,&anchor)!= AR_SUCCESS){LOGE(“NOT SUCCESSFUL”);返回; }

Problem-statement

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

android augmented-reality arcore projection-matrix
1个回答
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单位)变换。当设备从一侧转向另一侧时,属性driftx用于跟踪相机姿势的漂移(仅摄像机姿态的第5个索引值)。

driftx计算的方法不能产生精确的解,但接近预期的方法。正在进一步调查以提高漂移精度。

© www.soinside.com 2019 - 2024. All rights reserved.