2

在 Apple 的用音频创建沉浸式 AR 体验 之后,我认为尝试将对象放置在任何地方而不是垂直和水平平面上会很有趣。是否可以在没有平面检测的情况下使用触摸放置对象?我知道平面检测会提高命中测试和 ARAnchor 检测的准确性,那么有什么方法可以在场景中的任何其他位置执行命中测试吗?

4

1 回答 1

0

如果您的 AR 场景在当前会话中已经包含任何 3D 几何图形,您绝对可以使用命中测试在其中放置新模型(基于已包含的 3D 几何图形的放置),或者您可以使用特征点来放置模型(如果有) .

如果您的 AR 场景中根本没有 3D 几何图形,或者点云极其稀疏,您会在哪些方面应用 hit-testing 方法?命中测试是将 2D 点从屏幕空间投影到 3D 表面(请记住,检测到的平面是隐藏的 3D 平面)或任何适当的特征点

因此,在 AR 中,当开发人员使用 hit-testing 时,平面检测至关重要

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)

在此处输入图像描述

此外,命中测试在 3D 游戏中得到了积极使用,但它更适用于 VR,而不是 AR。

于 2019-07-03T11:54:21.307 回答