是否可以在未进行平面检测的情况下通过碰撞测试放置物体?

时间:2019-07-03 09:14:00

标签: swift scenekit augmented-reality arkit realitykit

在Apple的Creating an Immersive AR Experience with Audio 之后,我认为进行实验并尝试将对象放置在任何地方而不仅仅是在垂直和水平平面上都是很有趣的。在没有平面检测的情况下完全可以通过触摸放置物体吗?我知道飞机检测可以提高命中测试和ARAnchor检测的准确性,那么有人可以在场景中的任何其他位置执行命中测试吗?

1 个答案:

答案 0 :(得分:0)

如果您的AR场景在当前会话中已经包含任何3D几何体,则可以肯定地使用 hit-testing 在此处放置新模型(基于已经包含的3D几何体的放置),或者您可以将特征点用于模型的放置(如果有)。

如果您的AR场景中根本没有3D几何图形,或者有一个稀疏点云,您将命中测试方法应用于什么?命中测试是从屏幕空间投射到3D曲面(请记住,检测到的平面是隐藏的3D平面)或任何适当的 feature point 上的投影2D点。

因此,在AR中,当开发人员使用命中测试时,平面检测至关重要。

func hitTest(_ point: CGPoint, 
               types: ARHitTestResult.ResultType) -> [ARHitTestResult]
  

在这里您可以看到所有可用的ARHitTestResult.ResultType

但是请注意,有一个hitTest方法返回SCNHitTestResult

func hitTest(_ point: CGPoint, 
             options: [SCNHitTestOption : Any]?) -> [SCNHitTestResult]

用法:

let touchPosition: CGPoint = gesture.location(in: sceneView)

let hitTestResult = sceneView.hitTest(touchPosition, 
                                      types: .existingPlaneUsingExtent)

或:

let hitTestResult = sceneView.hitTest(touchPosition, 
                                      types: .featurePoint)

enter image description here

此外,命中测试在3D游戏中也得到了积极的应用,但其中的VR而非AR。