2017-09-01 21 views
0

看来HitResult只会让我们与表面(平面)或点云相交。我怎样才能用咔嗒声在空气中找到一个点,从而将物体悬浮在空气中?如何将物体置于空中?

回答

0

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

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

4

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

“上述检测面”做一个正常的击中测试飞机,并抵消返回一些y离会对得到的悬停位置。例如:

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

返回姿势即50厘米命中位置的上方。从这里创建一个主播,你很好走。您也可以在命中位置创建锚点,并在每帧中使用y翻译进行组合,以便为悬停高度设置动画。

为此,您可能需要编写在相机的右侧一译“在当前设备位置的前方浮动”的姿势:

frame.getPose().compose(Pose.makeTranslation(0, 0, -1.0f)).extractTranslation() 

给你一个翻译,只提出这距显示屏中心1m处。如果你想在一个特定的屏幕位置前面,我把一些代码放在this answer上来做屏幕指向世界光线转换。

道歉,如果你在Unity/Unreal,你的问题没有指定,所以我假设Java。

+0

是的,我使用的是Java,我的意思是“在空中”实际上是对screenPointToWorldRay的第二种解释。我认为ARCore应该在其API中包含此功能,因为这将是用户可能需要的非常常见的要求。 – redpearl

+0

只是要清楚,你指的是什么函数应该在API中?上面的代码很简单,我认为它会让事情变得混乱。在另一个答案链接的方法,但我同意可能应该包括(虽然没有承诺)。 –

+0

是的,我的意思是其他答案中的screenPointToWorldRay应该包含在API中。 – redpearl

相关问题