SimpleRay-Casting
与 相同Hit-Testing
,通过将虚拟光线从屏幕点投射到检测到的平面上,帮助在真实世界表面上找到 3D 位置。在 Apple 文档 (2019) 中,光线投射有以下定义:
光线投射是在现实环境中寻找表面位置的首选方法,但为了兼容性,命中测试功能仍然存在。通过跟踪光线投射,ARKit 和 RealityKit 会继续优化结果,以提高您通过光线投射放置的虚拟内容的位置精度。
当用户想要将虚拟内容放置到检测到的表面上时,最好为此提供提示。许多 AR 应用程序绘制一个焦点圆或正方形,让用户直观地确认 ARKit 所知道的表面的形状和对齐方式。因此,要找出在现实世界中放置焦点圈或正方形的位置,您可以使用 anARRaycastQuery
询问 ARKit 在现实世界中的哪些表面存在。
这是一个示例,您可以在其中看到如何实现光线投射方法makeRaycastQuery()
和raycast()
:
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let model = try! Entity.loadModel(named: "usdzModel")
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.raycasting()
}
fileprivate func raycasting() {
guard let query = arView.makeRaycastQuery(from: arView.center,
allowing: .estimatedPlane,
alignment: .horizontal)
else { return }
guard let result = arView.session.raycast(query).first
else { return }
let raycastAnchor = AnchorEntity(raycastResult: result)
raycastAnchor.addChild(model)
arView.scene.anchors.append(raycastAnchor)
}
}
如果你想知道如何Convex-Ray-Casting
在 RealityKit 中使用 a,请阅读这篇文章。
如果你想知道如何Hit-Testing
在 RealityKit 中使用,请阅读这篇文章。