ARG*_*Geo 2 augmented-reality swift arkit realitykit
什么是光线投射在ARKit和RealityKit方法?
func raycast(origin: SIMD3<Float>,
direction: SIMD3<Float>,
length: Float = 100,
query: CollisionCastQueryType = .all,
mask: CollisionGroup = .all,
relativeTo referenceEntity: Entity? = nil) -> [CollisionCastHit]
Run Code Online (Sandbox Code Playgroud)
或makeRaycastQuery实例方法:
func makeRaycastQuery(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
Ray-Casting,就像Hit-Testing帮助您在给定屏幕点的情况下在真实表面上找到3D位置一样。我发现了raycasting的以下定义:
射线投射是在现实环境中查找曲面上位置的首选方法,但是为了兼容性,命中测试功能仍然存在。通过跟踪射线广播,ARKit会继续完善结果,以提高通过射线广播放置的虚拟内容的位置精度。
当用户想要在某个表面上放置虚拟内容时,为此提示一个好主意。许多AR应用程序会绘制一个焦点圆或正方形,以使用户可以视觉确认ARKit知道的曲面的形状和对齐方式。因此,要找出在现实世界中放置焦点圆或正方形的位置,您可以使用ARRaycastQuery问ARKit现实世界中任何表面存在的地方。
这是一些抽象示例,您可以在其中看到光线投射方法makeRaycastQuery():
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let entity: Entity? = nil
override func viewDidLoad() {
super.viewDidLoad()
}
func rayCastingMethod() {
// target iOS 13.0+, Xcode 11.0
guard let raycastQuery = arView.makeRaycastQuery(from: arView.center,
allowing: .estimatedPlane,
alignment: .vertical) else {
return
}
guard let result = arView.session.raycast(raycastQuery).first else {
return
}
let transformation = Transform(matrix: result.worldTransform)
entity.transform = transformation
let raycastAnchor = AnchorEntity(raycastResult: result)
raycastAnchor.addChild(entity)
arView.addAnchor(raycastAnchor)
}
}
Run Code Online (Sandbox Code Playgroud)