当我需要使用makeRaycastQuery实例方法时:
func makeRaycastQuery(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?
任何帮助表示赞赏。
最佳答案
简单的 Ray-Casting
与 Hit-Testing
的方式相同,通过将假想的光线从屏幕点投影到检测到的平面上,帮助找到真实世界表面上的 3D 位置。在 Apple 文档中, ray-casting 有以下定义:
当用户想要将虚拟内容放置在检测到的表面上时,最好为此提供提示。许多 AR 应用程序会绘制一个焦点圆或正方形,让用户可以直观地确认 ARKit 所知道的表面的形状和对齐方式。因此,要找出在现实世界中放置焦点圆或正方形的位置,您可以使用 ARRaycastQuery
来询问 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)
}
}
关于swift - 在 ARKit 和 RealityKit 中使用 Raycast 的真正好处是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56466773/