[ARKit使用世界射线而不是屏幕点的命中测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ARKit使用世界射线而不是屏幕点的命中测试相关的知识,希望对你有一定的参考价值。
我想实现类似ARCore's raycast method之类的东西,它在世界空间坐标中接收任意射线,而不是屏幕空间点:
List<HitResult> hitTest (float[] origin3, int originOffset, float[] direction3, int directionOffset)
[我看到ARKit本身没有那样的方法,但是无论如何,也许有人有一个主意!
谢谢。
答案
在全新的Apple RealityKit 1.0框架中,您可以找到三种类型的Raycast方法:
ARView.raycast(from:allowing:alignment:)
此实例方法执行射线投射,其中将射线从相机中心通过视图中的点投射到场景中,并立即返回结果。您可以在ARKit 3.5中使用这种类型的raycast。
func raycast(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment) -> [ARRaycastResult]
ARView.scene.raycast(来源:方向:查询:遮罩:relativeTo:)
此实例方法针对给定的原点,方向和长度的射线对场景中的所有几何体执行凸射线投射。
func raycast(origin: SIMD3<Float>,
direction: SIMD3<Float>,
query: CollisionCastQueryType,
mask: CollisionGroup,
relativeTo: Entity) -> [CollisionCastHit]
ARView.session.trackedRaycast(_:updateHandler:)
此实例方法会随着时间的推移重复射线广播查询,以通知您物理环境中的更新曲面。
func trackedRaycast(_ query: ARRaycastQuery,
updateHandler: @escaping ([ARRaycastResult]) -> Void) -> ARTrackedRaycast?
以上是关于[ARKit使用世界射线而不是屏幕点的命中测试的主要内容,如果未能解决你的问题,请参考以下文章