如何将物体放在空中?

red*_*arl 1 arcore

似乎HitResult只让我们与表面(平面)或点云交叉.如何通过点击在空气中获得一个点,从而将物体漂浮在空中?

Ian*_*n M 9

这实际上取决于你在"空中"的意思.我看到两种可能性:

"在检测到的表面上方"对平面进行正常的命中测试,并将返回的姿势偏移一些Y距离以获得悬停位置.例如:

Pose.makeTranslation(0, 0.5f, 0).compose(hitResult.getHitPose())
Run Code Online (Sandbox Code Playgroud)

返回比命中位置高50厘米的姿势.从这里创建一个锚,你很高兴.您还可以在命中位置创建锚点,并使用每个帧的y平移进行组合,以允许设置悬停高度的动画.

"漂浮在当前设备位置的前面"为此您可能想要在相机姿势的右侧构成平移:

frame.getPose().compose(Pose.makeTranslation(0, 0, -1.0f)).extractTranslation()
Run Code Online (Sandbox Code Playgroud)

为您提供仅在展示中心前方1米处的平移姿势.如果你想要在特定的屏幕位置前面,我在这个答案中放了一些代码来做屏幕指向世界光线转换.

抱歉,如果你在Unity/Unreal,你的问题没有说明,所以我假设Java.


Phi*_*Lab 0

您经常看到命中结果被用户解释为所需位置的原因是,实际上这种用户交互没有封闭形式的解决方案。用户需要沿着从摄像机开始指向场景的光线的无限可能位置中的哪一个?单击的 2D 坐标仍然未定义第三维。

正如您所说的“空中中间”,为什么不取相机位置和命中结果之间的中心呢?您可以使用https://developers.google.com/ar/reference/java/com/google/ar/core/Pose.html#getTranslation(float[],%20int)提取当前位置pose.getTranslation