iOS ARView.hitTest 限制为最大 100 米
iOS ARView.hitTest limited to a max of 100 meters
我发现ARView.hitTest
限制在100米距离内。
所有距离超过 100m 的物体,无论大小,都不会被识别。
有什么方法可以解封吗?
let hitTest = arView.hitTest(point, query: .any, mask: .all)
没错,hitTest(_:query:mask:)
实例方法目前的距离限制是100米。但是你可以实现方法 raycast(from:to:)
允许你从任何场景点向任何方向发射光线,即使距离是 1000 米。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let cameraPosition = arView.cameraTransform.translation
let castHits = arView.scene.raycast(from: cameraPosition, to: [0, 0,-1000])
guard let hitTest: CollisionCastHit = castHits.first else { return }
print(hitTest.distance)
}
更新:
此外,正如@Sacha 所建议的,我们可以使用实例方法ray(through:) 来确定通过 2D space 视图中给定点的光线的位置和方向。它 returns 可选元组 (origin: SIMD3<Float>, direction: SIMD3<Float>)?
适合 raycast(from:to:)
方法的参数。
我发现ARView.hitTest
限制在100米距离内。
所有距离超过 100m 的物体,无论大小,都不会被识别。
有什么方法可以解封吗?
let hitTest = arView.hitTest(point, query: .any, mask: .all)
没错,hitTest(_:query:mask:)
实例方法目前的距离限制是100米。但是你可以实现方法 raycast(from:to:)
允许你从任何场景点向任何方向发射光线,即使距离是 1000 米。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let cameraPosition = arView.cameraTransform.translation
let castHits = arView.scene.raycast(from: cameraPosition, to: [0, 0,-1000])
guard let hitTest: CollisionCastHit = castHits.first else { return }
print(hitTest.distance)
}
更新:
此外,正如@Sacha 所建议的,我们可以使用实例方法ray(through:) 来确定通过 2D space 视图中给定点的光线的位置和方向。它 returns 可选元组 (origin: SIMD3<Float>, direction: SIMD3<Float>)?
适合 raycast(from:to:)
方法的参数。