如何使用ARCore测量距离?

有可能计算两个HitResult之间的距离吗?

或者我们如何使用ARCore计算实际距离(例如米)?

在Java ARCore世界单位是米(我刚刚意识到我们可能没有记录这个… aaaand看起来像不。 哎呀 ,bug提交)。 通过减去两个Pose的平移分量,您可以得到它们之间的距离。 您的代码看起来像这样:

首次点击为hitResult

 startAnchor = session.addAnchor(hitResult.getHitPose()); 

第二次命中为hitResult

 Pose startPose = startAnchor.getPose(); Pose endPose = hitResult.getHitPose(); // Clean up the anchor session.removeAnchors(Collections.singleton(startAnchor)); startAnchor = null; // Compute the difference vector between the two hit locations. float dx = startPose.tx() - endPose.tx(); float dy = startPose.ty() - endPose.ty(); float dz = startPose.tz() - endPose.tz(); // Compute the straight-line distance. float distanceMeters = (float) Math.sqrt(dx*dx + dy*dy + dz*dz); 

假设这些命中结果不会发生在同一帧上,创建一个Anchor很重要,因为每次调用Session.update()时都可以重新整形虚拟世界。 通过使用锚点而不仅仅是姿势来保持该位置,其姿势将更新以跟踪这些重建中的物理特征。

您可以使用getHitPose()提取两个HitResult姿势,然后比较它们的转换组件( getTranslation() )。 翻译定义为

…从目的地(通常是世界)坐标系到本地坐标系的位置矢量,以目的地(世界)坐标表示。

至于这个物理单位,我找不到任何评论。 使用经过校准的相机,这在数学上是可行的,但我不知道它们是否真的为此提供了API