Можно ли разместить объекты с помощью теста на удар без определения плоскости?
После Apple, создающей эффект погружения в AR с аудио, я подумал, что было бы интересно поэкспериментировать и попытаться разместить объекты где угодно, а не только в вертикальной и горизонтальной плоскости. Можно ли вообще разместить объект с помощью прикосновения без определения плоскости? Я понимаю, что обнаружение самолета повысило бы точность тестов на попадание и обнаружение ARAnchor, поэтому есть ли способ провести тесты на попадание в любом другом месте на сцене?
1 ответ
Если ваша AR-сцена уже содержит какую-либо 3D-геометрию в текущем сеансе, вы определенно можете использовать тестирование попадания, чтобы поместить туда новую модель (размещение на основе уже содержащей 3D-геометрии), или вы можете использовать характерные точки для размещения модели (если есть),
Если на вашей AR-сцене вообще нет трехмерной геометрии или существует очень разреженное облако точек, к чему вы применяете метод тестирования попаданий? Хит-тест - это спроецированная двухмерная точка из экранного пространства на трехмерную поверхность (помните, что обнаруженные плоскости являются скрытыми трехмерными плоскостями) или на любую подходящую характерную точку.
Таким образом, в 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)
Кроме того, хит-тестирование активно используется в 3D-играх, но это скорее для VR, чем для AR.