После создания иммерсивного опыта AR с аудио от Apple, я подумал, что было бы интересно поэкспериментировать. и старайтесь размещать объекты где угодно, а не только на вертикальной и горизонтальной плоскости. Можно ли вообще разместить объект касанием без определения плоскости? Я понимаю, что обнаружение плоскости повысит точность тестов попадания и обнаружение ARAnchor, так что будет ли какой-нибудь способ, где можно было бы выполнить тесты попадания в любом другом месте сцены?
Можно ли размещать объекты с проверкой попадания без обнаружения плоскости?
Ответы:
Если ваша сцена AR уже содержит какую-либо трехмерную геометрию в текущем сеансе, вы определенно можете использовать проверка попадания, чтобы разместить там новую модель (размещение на основе уже содержащейся трехмерной геометрии), или вы можете использовать характерные точки для размещения модели (если таковые имеются).
Если в вашей AR-сцене вообще нет 3D-геометрии или есть чрезвычайно разреженное облако точек, к чему вы примените метод проверки попадания? Hit-test - это спроецированная 2D-точка из экранного пространства на 3D-поверхность (помните, что обнаруженные плоскости являются скрытыми 3D-плоскостями) или на любую подходящую особенность.
Итак, в 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)
or:
let hitTestResult = sceneView.hitTest(touchPosition,
types: .featurePoint)
Также хит-тестирование активно используется в 3D-играх, но там оно больше для VR, чем для AR.