当我需要使用makeRaycastQuery实例方法时:

func makeRaycastQuery(from point: CGPoint,
                 allowing target: ARRaycastQuery.Target,
                       alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?

任何帮助表示赞赏。

最佳答案

简单的 Ray-CastingHit-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/

10-12 03:36