似乎 HitResult 只为我们提供了与表面(平面)或点云的交集。如何通过单击在空气中间获得一个点,从而使物体漂浮在空中?

最佳答案

这真的取决于你所说的“在空中”是什么意思。我看到了两种可能性:

"在检测到的表面之上" 对飞机进行正常的 HitTest ,并将返回的姿势偏移一些 Y 距离以获得悬停位置。例如:

Pose.makeTranslation(0, 0.5f, 0).compose(hitResult.getHitPose())

返回命中位置上方 50 厘米的姿势。从这里创建一个 anchor ,你就可以开始了。您也可以只在命中位置创建 anchor ,并在每一帧中使用 y 平移进行组合,以便为悬停高度设置动画。

" float 在当前设备位置的前面" 为此,您可能希望在相机姿势的右侧进行翻译:
frame.getPose().compose(Pose.makeTranslation(0, 0, -1.0f)).extractTranslation()

为您提供位于显示器中心前方 1m 处的仅平移姿势。如果你想在一个特定的屏幕位置前面,我在 this answer 中放了一些代码来做屏幕点到世界光线的转换。

抱歉,如果您使用的是 Unity/Unreal,您的问题没有具体说明,所以我假设是 Java。

关于arcore - 如何将物体置于空中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46008630/

10-10 05:54