В чем реальная выгода от использования Raycast в ARKit и RealityKit?
Для чего нужен ray-casting в ARKit и RealityKit?
И когда мне нужно использовать метод экземпляра makeRaycastQuery:
func makeRaycastQuery(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?
Любая помощь приветствуется.
1 ответ
Просто Ray-Casting
, Также как Hit-Testing
, помогает найти трехмерное положение на реальной поверхности, проецируя воображаемый луч из точки экрана. В документации Apple я нашел следующее определение ray-casting:
Приведение лучей - предпочтительный метод для поиска позиций на поверхностях в реальной среде, но функции проверки попадания остаются в наличии для совместимости. Благодаря отслеживанию трассировки лучей ARKit продолжает улучшать результаты, чтобы повысить точность позиционирования виртуального контента, который вы размещаете с помощью преобразования лучей.
Когда пользователь хочет разместить виртуальный контент на некоторой поверхности, неплохо было бы получить подсказку для этого. Многие приложения AR рисуют фокусный круг или квадрат, которые дают пользователю визуальное подтверждение формы и выравнивания поверхностей, о которых известно ARKit. Итак, чтобы узнать, где разместить фокусный круг или квадрат в реальном мире, вы можете использоватьARRaycastQuery
чтобы спросить ARKit, где в реальном мире существуют какие-либо поверхности.
Вот абстрактный пример, в котором вы можете увидеть метод лучевого каста. makeRaycastQuery()
:
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let model = try! Entity.load(named: "car")
func rayCastingMethod() {
// target iOS 13.0+, Xcode 11.0+
guard let query = arView.makeRaycastQuery(from: arView.center,
allowing: .estimatedPlane,
alignment: .vertical)
else {
return
}
guard let result = arView.session.raycast(query).first
else {
return
}
let transform = Transform(matrix: result.worldTransform)
model.transform = transform
let raycastAnchor = AnchorEntity(raycastResult: result)
raycastAnchor.addChild(model)
arView.scene.anchors.append(raycastAnchor)
}
}
Если вы хотите знать, как использовать
Convex-Ray-Casting
в RealityKit прочтите ЭТОТ ПОЧТУ.
Если вы хотите знать, как использовать
Hit-Testing
в RealityKit прочтите ЭТОТ ПОЧТУ.